node.js - 如何将Passport解码后的jwtPayload数据传递给nodejs API

标签 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 用作 Nodejs API 作为 req.params 或 req.body。

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

最佳答案

您需要将策略包装到一个获取 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 中,因为稍后可能会造成困惑(因为从技术上讲,它不是来自那些)。

关于node.js - 如何将Passport解码后的jwtPayload数据传递给nodejs API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56390470/

相关文章:

c# - ASP.NET 核心身份中通过角色声明进行的 JWT 身份验证

javascript - Passport.js 验证中间件后没有日志

c# - 重定向到 URL 而不是未经身份验证的 401

node.js - JWT (NodeJS) 的 512 位 key (公私钥对)是否足够安全

node.js - npm 错误!缺少脚本 : deploy

javascript - 找不到模块 : Error: Can't resolve 'crypto' React

node.js - MarkLogic npm 问题

python - 使用 node-celery(MeteorJS) 和 ampq 后端时,Celery 不返回结果

node.js - Google Cloud Datastore更新实体: Node. js客户端

node.js - NodeJS、RSA,这安全吗?