【问题标题】:How to pass jwtPayload data decoded by Passport to nodejs API如何将 Passport 解码的 jwtPayload 数据传递给 nodejs API
【发布时间】:2019-05-31 16:00:21
【问题描述】:

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

  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 使用到 Nodejs API 中。

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

【问题讨论】:

    标签: node.js jwt


    【解决方案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 中,因为以后可能会造成混淆(因为从技术上讲,它不是来自这些)。

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多