GraphQL 是一种用于 API 的查询语言,它的出现大大简化了前后端交互的过程。在 GraphQL 中,使用 JWT 认证可以增加 API 的安全性,避免未经授权的访问。
本篇文章将介绍如何在 GraphQL 中处理 JWT 认证,包括生成 token,验证 token,以及在 Resolver 中使用 token。
生成 JWT Token
在 GraphQL 中,我们可以使用 jsonwebtoken
包来生成 JWT Token。首先安装该包:
npm install jsonwebtoken
const jwt = require('jsonwebtoken'); const token = jwt.sign({ userId: 1 }, 'my_secret_key');
这里生成了一个包含 userId
属性的 token,并使用 my_secret_key
作为密钥。如果用户想访问受保护的 GraphQL 查询或者 Mutation,需要在请求头中带上该 token。
验证 JWT Token
在请求进入服务器的时候,我们需要验证该 token 是否有效。这里我们可以使用 express-jwt
包来进行验证。首先安装该包:
npm install express-jwt
在路由设置之前,我们需要通过 express-jwt
设置一个中间件来验证 token 的有效性:
const expressJwt = require('express-jwt'); app.use(expressJwt({ secret: 'my_secret_key', algorithms: ['HS256'] }));
secret
参数是用于生成 token 的密钥,algorithms
参数指定了使用的加密算法。
此时,如果请求头中不包含有效的 token,服务器将返回 401 Unauthorized
错误。
在 Resolver 中使用 JWT Token
如果请求中包含有效的 token,我们可以在 Resolver 中使用该 token 验证用户身份。首先,在客户端发送请求的时候,需要将 token 添加到请求头中:
const client = new ApolloClient({ uri: '/graphql', headers: { authorization: `Bearer ${token}` } });
在 Resolver 中获取 token:
function resolve(root, args, context) { const { user } = context.req; // ... }
这里获取了请求对象 req
中的 user
属性,该属性在验证 token 后由 express-jwt
中间件注入。
总结
本文介绍了如何在 GraphQL 中处理 JWT 认证,包括生成 Token,验证 Token,以及在 Resolver 中使用 Token。使用 JWT 认证可以增加 API 的安全性,避免未经授权的访问。本文所使用的示例代码可以参考以下链接:
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646253c6968c7c53b039ea8a