最近我一直在對json網絡令牌進行一些研究。從我所收集到的信息來看,它的一大優點就是它的無狀態。正如許多文章所述,您需要對用戶進行身份驗證所需的一切都與請求一起提供,因此您無需「按照每個請求來訪問數據庫」。json網絡令牌,護照-jwt及其驗證功能
但是,如果我沒有弄錯,passport-jwt
的文檔就是這樣做的,它們在每個請求中都會觸發數據庫。也就是說,對於每個需要通行證驗證的請求。
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
//this is a database call
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
// or you could create a new account
}
});
}));
我的印象是,到時候這個函數被調用,令牌已經過驗證,否則這一功能將不會被調用,而用戶得到了401 unauthorized
。
那麼爲什麼要檢查用戶的數據庫?由於這段代碼在文檔中,我通過檢查數據庫來做同樣的事情,但是我真的需要嗎?爲什麼我不應該這樣做
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
//this is a database call
done(null, {id: jwt_payload.sub})
}));