【发布时间】:2017-07-06 01:29:36
【问题描述】:
我正在尝试调试失败的 JWT 身份验证设置,它总是返回 401。
我的护照设置 (middleware/auth.js)
import passport from 'passport'
import { Strategy as JwtStrategy, ExtractJwt } from 'passport-jwt'
module.exports = function() {
var options = {};
options.jwtFromRequest = ExtractJwt.fromAuthHeader()
options.secretOrKey = 'superdupersecret'
var strategy = new JwtStrategy(options, function(payload, done) {
console.log('this is not printing') <---------------
var user = payload.sub || null;
if (user) {
return done(null, { id: user._id });
} else {
return done(new Error("User not found"), null);
}
});
passport.use(strategy);
return {
initialize: () => {
console.log('this only prints on boot'); <---------------
return passport.initialize();
},
authenticate: () => {
console.log('this too') <---------------
return passport.authenticate("jwt", {session: false});
}
};
};
我初始化护照的 server.js 文件:
import express from 'express'
(...)
var auth = require("./middleware/auth.js")();
// Instantiate app
const app = express();
// Initialize passport for auth use
app.use(auth.initialize())
我的受保护路由总是返回 401:
import express from 'express'
var auth = require("../middleware/auth.js")();
const userRouter = express.Router()
userRouter.get('/dashboard', auth.authenticate(), (req, res) => {
res.send('It worked! User id is: ' + req.user + '.')
})
export default userRouter
我尝试在实际的 passport.js 模块本身以及 passport-jwt 中添加打印语句,但没有成功。
在受保护路由上的身份验证中间件之后,没有任何记录。
我已经尝试了大量的设置排列over the past 3 days now。任何帮助将不胜感激
【问题讨论】:
-
auth.authenticate 里面有什么?它被调用了吗?
-
@yBrodsky auth.authenticate 在第一个代码示例的返回对象中。它没有根据请求记录任何内容,但仍返回 401
-
从 userRouter.get('/dashboard', auth.authenticate() 中去掉括号 ()
-
@yBrodsky 让请求挂起
-
问题是你的函数应该有 3 个参数。要求,水库,CB。所以当你完成你所做的一切时,调用回调继续前进。 expressjs.com/en/guide/using-middleware.html
标签: javascript node.js express passport.js jwt