ExpressGraphql JWT 身份验证,不工作

ExpressGraphql JWT authentication, not working

在过去的两周里,我一直在研究这个解决方案,但没有成功。谁能告诉我哪里出错了?对于身份验证,我使用 express-graphql、express-jwt 进行身份验证 [backend-[node, express-graphql, express-jwt, graphql-tools], frontend-[React-hooks,graphql-hooks]]。以下我用于身份验证

  const authMiddleware = jwt({
    secret: app.get("getsecretval"),
    credentialsRequired: false,
    getToken: function fromHeaderOrQuerystring(req) {
      if (
        req.headers.authorization &&
        req.headers.authorization.split(" ")[0] === "Bearer"
       )  {
               return req.headers.authorization.split(" ")[1];
          } else if (req.query && req.query.token) {
               return req.query.token;
      }
      return null;
    }
  });

  app.use(authMiddleware);
  app.use(
    "/graphqlAPIRoute",
    bodyParser.json(),
    authMiddleware,
    ExpressGraphQLHTTP(req => ({
      schema: Schema,
      rootValue: global,
      context: {
        user: req.user
      }
    }))
  );

// Schema - 放在 authMiddleware

之上

这甚至在授权 headers 不存在时也有效,即,如果应用程序处于 logged-in 状态,因为令牌存储在本地存储中,而不是传入 headers ] 但服务器代码执行并获取数据。情况一定不是这样,并且必须抛出身份验证错误。如果我添加 jwt 验证我们无法登录,因为没有 headers.

我想 auth 中间件没有工作,我应该在哪里放置 jwt-verify 函数来验证令牌。对于 Jwt 验证令牌,我正在使用

const jwtverify = require('jsonwebtoken');

因为 express-jwt 我发现没有这样的功能

谁能告诉我哪里出错了?任何帮助将不胜感激。

这样不行吗?

index.js - 代码序列很重要

const authMiddleware = jwt({
  secret: "place secret here either pass as env",
  credentialsRequired: false,
)}

app.use(authMiddleware);

const context = async (req) => {
  const { authorization: token } = req.headers;
  return { token };
};       

 app.use(
    "/graphqlAPIRoute",
    bodyParser.json(),
    authMiddleware,
    ExpressGraphQLHTTP(req => ({
      schema: Schema,
      rootValue: global,
      
    }))
    context: () => context(req),
  );