我正在使用passport-jwt
对某些路线进行身份验证,而我正在使用jwt
/ node-jwt-simple
创建jwt-simple
但面临一些困难,因为它看起来像我的{ {1}}验证中间件根本没有被调用。
这是我的
护照JWT策略
passport-jwt
然后我将它整合到这里。
路由文件
const jwtOpts = {
jwtFromRequest: ExtractJwt.fromHeader('Authorization'),
secretOrKey: secret,
};
passport.use(new jwtStrategy(jwtOpts, (payload, done) => {
console.log('payload ', payload.sub);
User.findById(payload.sub, (err, user) => {
if(err) { return done(err); }
if(!user) { console.log('didnt find!'); return done(null, false); }
done(null, user);
});
}));
这也是我制作router.get('/success',
passport.authenticate('jwt', {session: false}),
async (ctx, next) => ctx.body = await "success!");
的方式。
jwt
问题来了,当我点击那条路线时我只得到function tokenForUser(user) {
const timeStamp = new Date().getTime;
return jwt.encode({sub: user._id, iat: timeStamp}, secret);
}
//- Later in signup process
userToSave.save(async(err, user) => {
if(err) { return next(err); }
const token = await tokenForUser(user);
next(token);
});
//- If this helps, here is how my secret file looks like.
const secret = "JKAha23ja1ddHdjjf31";
export default secret;
并且在控制台中没有任何东西被记录甚至没有我先指定的“有效载荷”键。
我还应该说我有Unauthorized
(基于Koa)的令牌,我认为它类似于ctx.request.get('Authorization')
并且在所有路线中都有快递。
如果我的代码示例存在任何问题,可以在req.header('Authorization')
here的github问题上找到基于表达式的确切问题。
谢谢。
答案 0 :(得分:1)
在我把头包裹起来后,我知道这是我对整个身份验证过程如何运作的可怕理解。
当我从ctx.get('Authorization')
解码令牌时,我获得了与存储在db 中的令牌不同的_id
因为我有硬编码的授权标题在邮递员和思想中“如果我ctx.set('Authorization', token);
它将取代我在邮递员上硬编码的那个”。
当我在前端进行http调用时,我认为这个jwt
将包含在请求标头中。
我天真地认为jwt
直接从服务器传递到浏览器(类似render
的工作方式)和不从服务器传递到{{1}稍后将其嵌入请求中的过程,这是正确的方法。
整个代码很棒,除了现在我必须在我注册后创建它后才传递令牌ajax
。
谢谢。