我是身份验证的新手,我正在使用React,Redux,Passport.js,MongoDB和Express构建应用。
我按照https://jonathanmh.com/express-passport-json-web-token-jwt-authentication-beginners/上的教程使用Passport.js' jwt'来设置身份验证。战略。每次用户请求资源时都会执行以下代码。如您所见,发出数据库调用(假)以查找用户的ID。
var jwtOptions = {}
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();
jwtOptions.secretOrKey = 'tasmanianDevil';
var strategy = new JwtStrategy(jwtOptions, function(jwt_payload, next) {
console.log('payload received', jwt_payload);
// usually this would be a database call:
var user = users[_.findIndex(users, {id: jwt_payload.id})];
if (user) {
next(null, user);
} else {
next(null, false);
}
});
passport.use(strategy);
我遇到的问题是,每次向资源发送请求时,都会发出数据库查询。据我所知,使用JSON令牌的全部意义在于防止数据库调用。那么有没有一种方法可以在不触及数据库的情况下使用令牌?非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
您无法避免对请求的资源进行数据库调用,因为您始终需要获取该数据库(特别是如果该资源因每个用户而异)。
JWT允许您保存数据库调用,因为您不需要使用其凭据进行查询,以验证每个请求的身份。
如果有人还有其他任何内容,请告诉我们:)