我在登录时使用jwt-simple
节点模块创建令牌。下面 是我的代码:Passport身份验证功能在节点api中不起作用
apiRoutes.put('/login', function(req, res, next){
User.findOne({email:req.body.email}, function(err, user){
bcrypt.compare(req.body.password, user.password, function(err, result){
if(result){
var token=jwt.encode(user,config.secret);
return res.json({token:token});
}else{
return res.json("Incorrect Email and Password")
}
})
})
});
令牌被成功创建。 现在我试图在/dashboard
路由中验证用户。
apiRoutes.get('/dashboard', passport.authenticate('jwt', { session: false}), function(req, res) {
var token=getToken(req.headers);
if(token){
var decode=jwt.decode(token, config.secret);
User.findOne({name:decode.name}, function(err, user){
if(err){res.json(err)}
if(!user){
return res.status(403).send({success:false, msg:'Authentication Failed'})
}else{
res.json({success:true, msg:'Welcome in the Area' +user.name+'!'})
}
})
}else{
return res.status(403).send({success:false, msg:'No Token Found'})
}
});
getToken = function (headers) {
if (headers && headers.authorization) {
var parted = headers.authorization.split(' ');
if (parted.length === 2) {
return parted[1];
} else {
return null;
}
} else {
return null;
}
};
问题是,当我击中postman
这个API的展示Unauthorized
,当我从路径删除Passport身份验证功能passport.authenticate('jwt', { session: false})
那么它的打印success:false, msg:'No Token Found'
。 我不知道如何解决这个问题。请看看我的代码,并让我知道我的错在哪里。
帮助赞赏。 谢谢
如果使用passport.authenticate('jwt',{session:false}),目的是什么?以及它在调试或记录日志时给出的内容。 – Dnyanesh
'passport.authenticate('jwt',{session:false})'用于检查令牌是否有效。但是当我在路线上使用它时,它会给出'未授权'。这意味着'token'无效或什么?我没有得到 –