我使用以下代码创建了一个JWT网络令牌:
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的目的是要有一个到期日期。
护照策略
let options = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: config.auth.jwtExtraSecret
}
passport.use(
new JwtStrategy(options, async function (jwtPayload, done) {
try {
const user = await User.findOne({_id: jwtPayload._id})
if (!user) {
return done(new Error(), false)
}
return done(null, user)
} catch (err) {
console.log('error here in catch')
return done(new Error(), false)
}
})
)
评估
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语句,不确定我做错了什么。请帮忙,已经解决了这个问题很长时间
答案 0 :(得分:1)
你的函数什么都不返回:
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
,而不是Authorisation
。