【发布时间】:2018-09-14 02:53:47
【问题描述】:
我正在尝试使用护照中间件授权我的 JWT 令牌,但没有调用策略回调函数。
在我的app.js 文件中,我指定我的/users 路由使用中间件,如下所示:
app.use('/users', passport.authenticate('jwt', { session: false }), users);
然后我有一个单独的文件 ./passport.js(我在 app.js 的顶部需要它),我在其中指定了我的护照策略:
passport.use(new JWTStrategy({
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey : 'jwt_secret_key'
},
function (jwtPayload, cb) {
console.log('jwtPayload', jwtPayload)
}
));
但我无法运行控制台日志。
我正在使用邮递员对此进行测试,并从授权选项中选择了Bearer Token。我可以看到这是在我的请求中添加一个标头。
当我在我的节点应用程序中记录我的请求对象时,我可以看到它看起来像这样:
headers: {
authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1YWM0YWI2ZTk1MWJiMjE1M2NhMjc0OWUiLCJmaXJzdF9uYW1lIjoiQW5kcmV3IiwibGFzdF9uYW1lIjoiTWNDYWxsdW0iLCJlbWFpbCI6ImFtY2NhbGx1bTg5QGdtYWlsLmNvbSIsImlhdCI6MTUyMjg0NzEyNSwiZXhwIjoxNTIyODUwNzI1fQ.WH12GJHMGrGsiJNIwUG2Dx_a9cZKjw7_SW8FYlEvLmk',
accept: '*/*',
host: 'localhost:3037',
},
所以中间件应该检测承载令牌并调用中间件?
任何帮助将不胜感激
【问题讨论】:
-
所以......假设你在某处得到了
app.use(passport.initialize())的线路? -
不,我没有。我刚刚开始工作。看起来我的策略中的
secretOrKey与我创建令牌的secretOrKey不匹配。不知道为什么它会默默地失败,但看起来这是导致问题的原因,因为它现在正在工作。 -
hmm 我一直觉得
passport.initialize()是使用带护照的 Express 时的要求。 -
你有一个如何/在哪里使用它的例子吗?也许我在不知不觉中错过了一些东西
-
它仍在docs 中,请参阅
middleware部分。
标签: node.js jwt passport.js express-jwt