JWT nodejs / express-无效的签名

时间:2019-03-13 15:34:50

标签: node.js angular express jwt

我在使用Jwt时遇到麻烦,尤其是出现“无效签名”错误。

用户登录(jsonwebtoken)后,我正在生成令牌。

userSchema.methods.generateJwt = function() {
  var expiry = new Date();
  //expiry.setDate(expiry.getDate() + 7);

  expiry.setDate(expiry.getDate() + 2);
  return jwt.sign({
    _id: this._id,
    username: this.username,
    name: this.lastname,
    exp: parseInt(expiry.getTime() / 1000),
  }, process.env.SRCT,  {
    algorithm: 'HS256'
  });
}

然后我正在创建一个express-jwt中间件,以将其添加到路由中:

var auth = jwt({
  secret: process.env.SRCT,
  userProperty: 'payload'
});

用于这样的:

router.get('/', auth, ctrlUser.slash);

我创建的JWT在前端请求(授权承载)中传递,并且与登录后立即创建的JWT相同。

但是不幸的是,在对nodejs后端的每次请求之后,我仍然遇到错误{“ message”:“ UnauthorizedError:invalid signature”}。

有人可以告诉我签名无效吗?

预先感谢

2 个答案:

答案 0 :(得分:0)

您的验证功能在哪里?您需要检查对保护区发出的每个请求令牌是否确实有效,jwt提供了验证功能。

答案 1 :(得分:0)

您似乎没有在解析令牌的请求标头,也没有在使用JWT库的verify()函数。您的身份验证中间件应该看起来像这样

module.exports = (req, res, next) => {
    try {
        //parse the token from Authorization header (value of "bearer <token>")
        let token = req.headers.authorization.split(" ")[1];

        //verify the token against your secret key to parse the payload
        const tokenData = jwt.verify(token, process.env.JWT_SECRET_KEY);

        //add the data to the request body if you wish
        req.user = tokenData;
        next();
    } catch (err) {
        res.status(401).json({
            message: "Unauthorized access error!",
        });
    }
};