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



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

  passport.use(
    'onlyForRefreshToken',
    new JWTStrategy(
      {
        jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
        secretOrKey: jwtSecretRider,
      },
      (jwtPayload, done) => {
        if (jwtPayload) {
          return done(null, jwtPayload); 
        }
        return done(null, false);
      },
    ),
  );

我的目标是将"jwtPayload"放入位于其他文件夹的 Nodejs 的 rest 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 使用 Nodejs API。

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

您需要

将策略包装到一个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,因为它以后可能会令人困惑(因为从技术上讲,它不是来自这些(。

最新更新