每次我想访问受限资源时,如何在不进行db调用的情况下使用JSON令牌?

时间:2018-01-08 20:52:41

标签: reactjs authentication redux passport.js

我是身份验证的新手,我正在使用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令牌的全部意义在于防止数据库调用。那么有没有一种方法可以在不触及数据库的情况下使用令牌?非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您无法避免对请求的资源进行数据库调用,因为您始终需要获取该数据库(特别是如果该资源因每个用户而异)。

JWT允许您保存数据库调用,因为您不需要使用其凭据进行查询,以验证每个请求的身份。

如果有人还有其他任何内容,请告诉我们:)