Javascript JWT护照验证

Javascript JWT护照验证,javascript,node.js,jwt,passport.js,Javascript,Node.js,Jwt,Passport.js,我正在使用以下代码创建JWT web令牌: function generateToken(req, user) { const ONE_WEEK = 60 * 60 * 24 * 7 return jwt.sign(user, config.auth.jwtExtraSecret, { expiresIn: ONE_WEEK }) // secret is defined in the environment variable JWT_SECRET } 然后,在向

我正在使用以下代码创建JWT web令牌:

 function generateToken(req, user) {
     const ONE_WEEK = 60 * 60 * 24 * 7
  return jwt.sign(user, config.auth.jwtExtraSecret, {
    expiresIn: ONE_WEEK
  }) // secret is defined in the environment variable JWT_SECRET

}
然后,在向客户机发送数据时,我执行以下代码

 res.send({
        user: sendData(user, 'username','tokens','_id', 'extraToken'),
        extraToken: generateToken(req, userJson),

        })
注意:extraToken没有直接连接到用户模型,我不希望它连接到那里。还有另一个令牌分配给用户模型永久令牌,它在验证路由时工作良好。 因此,请克制自己,不要就此给出建议

extraToken的目的是有一个到期日期

护照策略

评估

     jwtAuthCheck(req, res, next) {
    passport.authenticate('jwt', function (error, user) {

        if (error || !user) {
            res.status(403).send({
                message: 'you dont have an access'
            })

        } else {

            req.user = user
            next();

        }


    })(req, res, next)
},
向我的标头中的路由发送请求时

as a key i have "Authorization" and as a value ~Bearer ${token}~
问题与问题

不知什么原因,它一直在给我一个信息

  "message": "you dont have an access"

错误开始于passport.use中的catch语句,不确定我做错了什么。请帮助,您已经对此问题进行了很长时间了

您的函数不返回任何内容:

function generateToken(req, user) {
    var token = jwt.sign({
        user,
        auth: 'magic',
        agent: req.headers['user-agent'],
        exp: Math.floor(new Date().getTime() / 1000) + 7 * 24 * 60 * 60
    }, config.auth.jwtExtraSecret);

    return token;
}

您的标题应该是Authorization,而不是Authorization。

我已将标题更改为Authorization,几分钟前我才注意到它。上面提到的那个函数实际上返回了一个令牌,我已经检查了很多次,为了简单起见,我也改变了那个函数,我试着把const user=wait user.findOne{u id:jwtPayload.\u id}在我的catch error语句中,它说TypeError:无法读取undefined的属性'findOne',这很奇怪,因为我在其他路由中使用findOne,它正常工作。您在路由文件中定义了用户模型吗?你把猫鼬也包括进去了吗?我又查了一遍,你是对的。我导入了{User}而不是导入用户:
function generateToken(req, user) {
    var token = jwt.sign({
        user,
        auth: 'magic',
        agent: req.headers['user-agent'],
        exp: Math.floor(new Date().getTime() / 1000) + 7 * 24 * 60 * 60
    }, config.auth.jwtExtraSecret);

    return token;
}