2016-11-29 75 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

是的,我已经创建。 –