2016-11-29 33 views
2

我在登錄時使用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'。 我不知道如何解決這個問題。請看看我的代碼,並讓我知道我的錯在哪裏。

幫助讚賞。 謝謝

+0

如果使用passport.authenticate('jwt',{session:false}),目的是什麼?以及它在調試或記錄日誌時給出的內容。 – Dnyanesh

+1

'passport.authenticate('jwt',{session:false})'用於檢查令牌是否有效。但是當我在路線上使用它時,它會給出'未授權'。這意味着'token'無效或什麼?我沒有得到 –

回答

0

根據我的理解。您需要在使用passport.authenticacte()函數之前定義策略。檢查this link。我想你可以使用passport-jwt module而不是simple-jwt。希望能幫助到你。

+0

我正在關注[this](https://devdactic.com/restful-api-user-authentication-1/)教程。其工作正常,甚至他也在使用'jwt-simple'。 –

+0

那麼你是否按照教程創建了jwt策略?查看教程中的「創建我們的策略和用戶」部分。 –

+0

是的,我已經創建。 –