如何将Passport解码的jwtPayload数据传递到nodejs API

时间:2019-05-31 07:18:47

标签: node.js jwt

我正在使用这种护照策略。

  passport.use(
    'onlyForRefreshToken',
    new JWTStrategy(
      {
        jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
        secretOrKey: jwtSecretRider,

      },
      (jwtPayload, done) => {

        if (jwtPayload) {
          return done(null, jwtPayload); 
        }
        return done(null, false);
      },
    ),
  );

我的目标是将'jwtPayload'放入其他文件夹中的Nodejs的其余API中。
也就是说,我想使用在以下代码中解码的jwtPayload。

exports.riderRefreshToken = async (req, res) => {
    const { email } = req.body;

    const exRiderRefreshToken = await Rider.findOne({ email });
}


而且此路由器通过jwtstrategy的中间件工作。

router.post(
  '/refreshToken',
  passport.authenticate('onlyForRefreshToken', { session: false }),
  authenticationCtrl.riderRefreshToken,
);

总而言之,当JWT从jwtstrategy顺利通过时,Post路由器将正常工作。
 我想将jwtstrategy中的jwtPayload用作req.params或req.body。

您能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要将策略包装到一个获得reqres的函数中:

const isAuthenticated: RequestHandler = (req, res, next) => {
  passport.authenticate(
    'jwt',
    { session: false, failWithError: true },
    (error, user) => {
      if (error) {
        return next(error)
      }

      //HERE PUT USER WHERE YOU WANT
      //req.data or req.user or req.userInfo
      req.user = user

      return next()
    }
  )(req, res, next)
}

我不建议将用户放到req.paramsreq.body中,因为以后可能会造成混淆(因为从技术上讲,它不是来自那些用户)。