最近我一直在对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})
}));