首页 > 解决方案 > 无法从 auth0/express-jwt 库中获取 JWT 的解码负载

问题描述

我正在尝试在我的 expressjs 应用程序中使用express-jwtfromauth0作为中间件来获取解码的 JWT 有效负载。对于要用于身份验证的令牌,我必须先使用自定义async函数来处理令牌,然后再将其提供给express-jwt. 我知道我可以在getToken参数下编写自定义函数express-jwt,如下所示,但它不适用于async函数。

const jwt = require("express-jwt");

const checkJwt = jwt({
  secret: 'hello world !',
  algorithms: ['HS256'],
  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;
  }
});

module.exports = checkJwt;

为了克服这个限制,我将 包含在jwt()一个更大的中间件函数中,该函数首先处理令牌,然后将其提供给jwt(). 未处理的令牌附加到我的标题中。我的代码结构如下:

const myMiddleware = async (req, res, next) => {
  // Process Token First
  const processedToken = await functionToProcessToken(req.headers.tokenLocation);
  // Jwt Authentication
  jwt({
    secret: 'hello world !',
    algorithms: ['HS256'],
    credentialsRequired: false,
    getToken: processedToken
  });
  next();
});

module.exports = myMiddleware;

虽然我能够毫无问题地验证我的路由,但我需要获取解码的 JWT 有效负载以供进一步使用。默认情况下,如文档中所写,解码的有效负载应该已附加到req.user,但是当我尝试 console.log 它时,它显示undefined. 我也尝试过添加requestProperty,但效果不佳。的文档resultProperty不是很清楚,所以我也无法让它工作。

如果有人能指出我正确的方向以帮助我实现中间件的预期结果,我将非常感激。谢谢!

标签: node.jsexpressjwtauth0express-jwt

解决方案


推荐阅读