我在登錄時使用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'無效或什麼?我沒有得到 –