Javascript JWT护照验证
我正在使用以下代码创建JWT web令牌: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 } 然后,在向
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;
}