【问题标题】:Not getting the req.user object using express-jwt没有使用 express-jwt 获取 req.user 对象
【发布时间】:2021-01-23 18:01:34
【问题描述】:
exports.requireSignin = expressJwt({
   secret: process.env.JWT_SECRET,
   algorithms: ["HS256"], 
   userProperty: "auth"
 });

我正在使用它访问一个秘密路由进行测试,但是我没有在我的路由中获取 req.user 属性。它导致一个空对象(未定义)。

router.get("/secret",requireSignin,(req, res) => {
    res.json({
        message: req.user,
        
    });
   
});

我正在使用 Postman 测试并发送带有授权标头的令牌作为不记名令牌。

【问题讨论】:

  • 那是requireSignin 中间件的完整代码吗?

标签: node.js reactjs express jwt


【解决方案1】:

您没有从请求中验证/解码您的 JWT 令牌,一旦解码,将其分配给 req 对象并调用 next()

const JWT = require('jsonwebtoken')

module.exports.requireSignin = (req, res, next) => {
  const token = req.headers.authorization

  if (!token) {
    res.status(400).json({ status: false, message: 'Token required' })
  }

  JWT.verify(token, process.env.JWT_SECRET, (err, decoded) => {
    if (err) {
      console.log(`JWT: ${err.message}`)
      return res
        .status(401)
        .json({ status: false, error: 'Token is not valid' })
    }
    req.user = decoded
    next()
  })
}

哦,您正在使用express-jwt 包。起初我没有看到我的答案是关于如何在req 中获取令牌有效负载对象的一般性答案。希望它可以帮助将来的人。

【讨论】:

    【解决方案2】:

    我也被这个练习卡住了。要解决这个问题,请像这样使用 req.auth:

    router.get("/secret",requireSignin,(req, res) => {
        res.json({
            user: req.auth,
        });
       
    });
    

    希望有用。祝你好运。

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 2019-12-10
      • 2016-06-22
      • 2020-05-11
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多