背景/上下文
我正在尝试实现简单的password-jwt身份验证。 我能够登录并生成一个jwt令牌。
我的问题
尝试访问受保护的路由时,无法从标头中提取jwt令牌。除非使用邮递员的授权载体令牌,否则我将获得未经授权的访问。
我尝试做的事情
创建了jwt令牌后,我尝试设置授权标头,但是没有从授权标头中提取标头,并且我意识到当我尝试访问受保护的路由时,甚至没有发送标头。 虽然我无法在浏览器上进行身份验证,但我可以通过设置授权承载令牌来对邮递员请求进行身份验证。在邮递员上,带有承载令牌的授权标头似乎在“临时标头”上,如下图所示: 仅当我向邮递员提出请求时,它才有效!
我想要什么
如何以邮递员的方式发送授权标头,以便可以通过我的passport-jwt策略正确提取它?
某些代码
护照JS
const options = {
jwtFromRequest:ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey:jwtSecret.secret
};
passport.use(
'jwt',
new JWTStrategy(options,(jwt_payload,done)=>{
try{
User.findOne({
where:{
id:jwt_payload.id
},
}).then(user=>{
if(user){
console.log('User found in DB in passport')
done(null,user)
}else{
console.log('User not found in db');
done(null,false)
}
});
} catch(err){
done(err)
}
})
)
登录路线(工作正常)
router.post('/', (req,res,next)=>{
passport.authenticate('login',(err,user,info)=>{
if(err){
console.log(err)
}
if(info !== undefined){
console.log(info.message + 'line 17');
res.send(info.message);
}else{
req.logIn(user,err=>{
console.log('user>'+JSON.stringify(user))
const token = jwt.sign({id:user.id},jwtSecret.secret);
res.status(200).send({
auth:true,
token:'Bearer '+token,
message:'User found & logged in'
})
})
}
})(req,res,next)
})
这是我要访问的主server.js文件上的受保护路由。当身份验证成功时,它简化了console.log令牌(仅在使用邮递员时发生)
var findUsers = require('./routes/findUser')
app.use('/findUser',passport.authenticate('jwt', { session: false }),findUsers)