我在登录时使用jwt-simple节点模块创建令牌。
下面是我的代码:

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.authenticate('jwt', { session: false})时,其打印为success:false, msg:'No Token Found'
我不知道如何解决这个问题。请查看我的代码,让我知道我的错在哪里。

帮助表示赞赏。
谢谢

最佳答案

根据我的理解。您需要先定义策略,然后再使用passport.authenticacte()函数。检查this link。而且我认为您可以只使用passport-jwt module而不是simple-jwt。希望能帮助到你。

关于node.js - Passport身份验证功能在 Node api中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40858213/

10-13 05:59