2017-01-04 32 views
0

工作以及我使用passport-jwt一些航线验证和我与node-jwt-simple/jwt-simple创建我jwt秒,但面临着一些困难,因为它看起来像我passport-jwt身份验证中间件根本不被称为。护照,智威汤逊身份验证不使用节点智威汤逊 - 简单

这里是我的

护照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); 
 
    }); 
 
}));

我敢那么它集成在这里。

routes文件

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并在控制台中没有获取注销甚至不是“有效载荷”我指定的第一个关键。

我也应该说,我有ctx.request.get('Authorization')(基于Koa)的令牌,我认为这是类似req.header('Authorization')与所有路线中的快递。

而且确切的快递基于问题可以对node-jwt-simplehere GitHub的问题找到柜面有我的代码样本的任何问题。

谢谢。

回答

1

当我将自己的脑袋包裹好后,我知道这是我对整个认证过程如何工作的恐惧理解。

当我从ctx.get('Authorization')解码令牌我得到了不同_id比一个存储在因为我在邮递员硬编码授权头,并认为“分贝如果我ctx.set('Authorization', token);它将取代一个我存上邮差”。

当我在前端进行http调用时,我认为这个jwt将被包含在请求的头部中的次数更少。

我天真地以为jwt s的直接从服务器到浏览器(喜欢的东西怎么render作品)和从服务器传递到ajax过程,后来其嵌入请求提出这是正确的方式。

整个代码真棒,除了现在我必须在注册时创建它后才传递令牌ctx.body = token;

谢谢。