认证

创建用户

到目前为止,我们一直只使用 Link 类型,现在新建 User 的事后了,以便应用程序可以显示谁发布了某个链接以及投票的人。

我们将需要一些注册用户,因此从创建它们的变更开始。你已经知道这个过程了,但我们再重复一遍:

登录变更

现在我们有用户来,如何使用 GraphQL 进行登录呢?当然是通过新的变更!突变不仅仅是获取数据更是当需要某个操作时客户端与服务器通信的一种方式。

首次通过 GraphQL 对用户进行登录时,将使用简单的电子邮件/密码登录方法,返回可用于后续请求进行身份验证的令牌。

请注意,这 不应该是 一个生产就绪的身份验证功能,但对于小功能的原型来说是可以的。在真正的应用程序中,您应该确保在传递密码之前对密码进行正确加密,并使用良好的令牌生成方法,例如 JWT

添加此变更的工作流程将与我们之前完成的工作非常相似:

认证请求

通过 signinUser 变更提供的令牌,应用程序可以通过 Authorization 请求头部进行后续请求进行身份验证。 GraphQL 服务器应该能够从每个请求的标题中获取内容,检测与它相关的用户,并将这些信息传递给解析函数。

如之前已经看过的那样,在解析函数之间共享数据的最佳方式是上下文对象。在每个请求中,您都需要该对象不同,因为每个请求可能来自不同的用户。幸运的是,apollo-server-express 也是允许的。

这个 authenticate 函数将执行实际请求验证并返回当前验证的用户(如果有的话)。

生成令牌是如此简单。就像以前说过的那样,当建立一个真实世界的应用程序时,请确保检查各种不同的令牌,如JWT。

创建用户的链接

我们的服务器现在可以检测触发每个 GraphQL 请求的用户。这在许多情况下可能是有用的。例如,经过身份验证的用户应该恰好是发布使用 createLink 变更创建的链接的用户。我们现在可以为每个链接存储此信息。

只需要按下面的步骤:

完成!不幸的是,如果尝试重新启动服务器并创建新的链接,那么它们仍然会以匿名方式存储,如下所示:

这是因为 GraphiQL 构建的请求的 Authorization 请求头部中没有传递任何内容,因为它并不真正了解正在使用的身份验证方法。幸运的是,这也是可以配置的。

配置 GraphiQL 的请求头部

现在,我们将配置 GraphiQL,以便在每个请求的 Authorization 中传递用户的令牌令牌。 为此,请按照这些简单的步骤:

Unlock the next chapter
GraphQL 服务器必须进行什么样的身份验证?
用户名/密码验证
令牌验证
任何使用 'Authorization' 请求头部的验证
任何一种,对认证没有要求