2017-01-04 34 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;

謝謝。