问题描述
我正在尝试使用express-jwt
中的auth0
作为我的expressjs应用程序的中间件来获取解码的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 !',getToken: processedToken
});
next();
});
module.exports = myMiddleware;
虽然我可以毫无问题地对路由进行身份验证,但是我需要获取解码后的JWT有效负载以备将来使用。默认情况下,如文档中所述,已解码的有效负载应该已经附加到req.user
,但是当我尝试进行console.log记录时,它会显示undefined
。我也尝试添加requestProperty
,但效果不佳。 resultProperty
的文档不是很清楚,因此我也无法正常工作。
如果有人能指出正确的方向来帮助我实现中间件的预期成果,我将非常感激。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)