首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在graphql nodejs中使用jwt

在GraphQL Node.js中使用JWT(JSON Web Token)可以实现身份验证和授权。JWT是一种用于安全传输信息的开放标准,它由三部分组成:头部、载荷和签名。

下面是在GraphQL Node.js中使用JWT的步骤:

  1. 安装依赖:首先,确保你的项目中已经安装了jsonwebtokenexpress-jwt这两个包。你可以使用以下命令进行安装:
代码语言:txt
复制
npm install jsonwebtoken express-jwt
  1. 创建JWT密钥:生成一个用于签名和验证JWT的密钥。你可以使用以下代码生成一个随机的密钥:
代码语言:txt
复制
const jwtSecret = require('crypto').randomBytes(64).toString('hex');
console.log(jwtSecret);
  1. 创建JWT中间件:在GraphQL服务器中创建一个中间件,用于验证和解析JWT。以下是一个示例中间件的代码:
代码语言:txt
复制
const jwt = require('jsonwebtoken');
const expressJwt = require('express-jwt');

const JWT_SECRET = 'your-jwt-secret'; // 替换为你的JWT密钥

const authMiddleware = expressJwt({
  secret: JWT_SECRET,
  algorithms: ['HS256'],
  credentialsRequired: false // 如果不需要验证所有请求,可以将其设置为false
});

const getUserFromToken = (req) => {
  const token = req.headers.authorization?.split(' ')[1];
  if (token) {
    try {
      return jwt.verify(token, JWT_SECRET);
    } catch (error) {
      // 验证失败,返回null或者抛出错误
      return null;
    }
  }
  return null;
};

module.exports = { authMiddleware, getUserFromToken };
  1. 在GraphQL解析器中使用JWT:在GraphQL解析器中使用JWT进行身份验证和授权。以下是一个示例解析器的代码:
代码语言:txt
复制
const { authMiddleware, getUserFromToken } = require('./auth');

const resolvers = {
  Query: {
    // 需要身份验证的查询
    protectedQuery: (parent, args, context) => {
      const user = getUserFromToken(context.req);
      if (!user) {
        throw new Error('未经授权的访问');
      }
      // 在这里处理受保护的查询逻辑
    },
    // 不需要身份验证的查询
    publicQuery: (parent, args, context) => {
      // 在这里处理公共查询逻辑
    }
  },
  Mutation: {
    // 需要身份验证的突变
    protectedMutation: (parent, args, context) => {
      const user = getUserFromToken(context.req);
      if (!user) {
        throw new Error('未经授权的访问');
      }
      // 在这里处理受保护的突变逻辑
    },
    // 不需要身份验证的突变
    publicMutation: (parent, args, context) => {
      // 在这里处理公共突变逻辑
    }
  }
};

module.exports = resolvers;
  1. 在GraphQL服务器中使用JWT中间件:将JWT中间件添加到GraphQL服务器中,以便在每个请求中验证JWT。以下是一个示例服务器的代码:
代码语言:txt
复制
const express = require('express');
const { ApolloServer } = require('apollo-server-express');
const typeDefs = require('./schema');
const resolvers = require('./resolvers');
const { authMiddleware } = require('./auth');

const app = express();

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => ({ req })
});

app.use(authMiddleware);

server.applyMiddleware({ app });

app.listen({ port: 4000 }, () =>
  console.log(`服务器已启动,访问地址:http://localhost:4000${server.graphqlPath}`)
);

现在,你可以在GraphQL Node.js中使用JWT进行身份验证和授权了。对于需要身份验证的查询和突变,用户必须在请求的Authorization头部中提供有效的JWT。在解析器中,你可以使用getUserFromToken函数来获取JWT中的用户信息,并根据需要进行授权和访问控制。

这是一个基本的使用JWT的示例,你可以根据自己的需求进行扩展和定制。关于JWT的更多信息和用法,请参考jsonwebtokenexpress-jwt的文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券