Passport-jwt验证与node-jwt-simple

时间:2017-01-04 08:24:45

标签: node.js express jwt koa passport.js

我正在使用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问题上找到基于表达式的确切问题

谢谢。

1 个答案:

答案 0 :(得分:1)

在我把头包裹起来后,我知道这是我对整个身份验证过程如何运作的可怕理解。

当我从ctx.get('Authorization')解码令牌时,我获得了与存储在db 中的令牌不同的_id因为我有硬编码的授权标题在邮递员和思想中“如果我ctx.set('Authorization', token);它将取代我在邮递员上硬编码的那个”。

当我在前端进行http调用时,我认为这个jwt将包含在请求标头中。

我天真地认为jwt直接从服务器传递到浏览器(类似render的工作方式)和从服务器传递到{{1}稍后将其嵌入请求中的过程,这是正确的方法。

整个代码很棒,除了现在我必须在我注册后创建它后才传递令牌ajax

谢谢。