从回调访问jwtFromRequest

时间:2019-04-15 17:03:51

标签: javascript node.js authentication passport.js passport-jwt

我正在使用JWT策略学习 passport.js ,我想创建一个注销用户的系统。

我要这样处理:

  1. 用户注销时,其令牌存储在我的数据库中,名为InvalidTokens的表中
  2. 每次用户提出受保护的请求时,我都想检查其令牌是否在表InvalidTokens

问题是我不知道如何在下面的代码中访问字段jwtFromRequest

// passport.js
// File where I store my authentication strategies

// ...

/**
 * Use JWT strategy for all the other requests that need authentication on the
 * server 
 */
var opts = {
  jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
  secretOrKey: 'secret',
}

passport.use('jwt', new JWTStrategy(
  opts,
  async (jwtPayload, done) => {
    try {
      const token = await TokenInvalide.findOne({
        where: {
          Token: '<token_value_I_can\'t_reach>',
        }
      })

      if (token !== null)
        return done(null, false);

      return done(null, jwtPayload.idUtilisateur);

    } catch (e) {
      console.log(e);
      return done(null, false);
    }
  }
));

1 个答案:

答案 0 :(得分:1)

According to the doc,您可以通过将request设置为true来将passReqToCallback对象传递给回叫

还没有测试过,但是应该是正确的方向

var opts = {
  jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
  secretOrKey: 'secret',

  passReqToCallback: true // <----- Add this

}

passport.use('jwt', new JWTStrategy(
  opts,
  async (req, jwtPayload, done) => {

    const rawJWTToken = req['Authorization'].split(' ')[1]

    ...
  }
));