【发布时间】:2017-10-10 16:56:01
【问题描述】:
我最近一直在做一些关于 json 网络令牌的研究。从我收集到的信息来看,它的一大优势是它的无国籍状态。对用户进行身份验证所需的一切都随请求一起提供,因此您不需要像许多文章所述的那样“在每个请求上都访问数据库”。
但是,如果我没记错的话,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})
}));
【问题讨论】:
标签: node.js jwt passport.js json-web-token