Passport Authenticate 功能在节点 api 中不起作用

Posted

技术标签:

【中文标题】Passport Authenticate 功能在节点 api 中不起作用【英文标题】:Passport Authenticate function is not working in node api 【发布时间】:2017-04-12 23:54:54 【问题描述】:

我在登录时使用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.authenticate('jwt', session: false),目的是什么?以及它在调试或记录时提供的令牌。 passport.authenticate('jwt', session: false) 用于检查令牌是否有效。但是当我在路线上使用它时,它会给出Unauthorized。这意味着token 无效或什么???我没有得到 【参考方案1】:

据我了解。您需要在使用 passport.authenticacte() 函数之前定义一个策略。检查this link。而且我认为您可以使用passport-jwt module 而不是simple-jwt。希望对您有所帮助。

【讨论】:

我正在关注this 教程。即使他也在使用jwt-simple,它也能正常工作。 那么您是否按照教程创建了 jwt 策略?查看教程中的“创建我们的策略和用户”部分。 您确定您是通过 parted[1] 变量中的 getToken 函数中的标头接收令牌吗? 可能不是。如何检查? 只需打印 headers.authorization 并告诉我你得到了什么

以上是关于Passport Authenticate 功能在节点 api 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Passport.authenticate 导出-> passport.authenticate(一些东西)(req,res,next)?

如何从sails action2调用Passport Authenticate函数

passport.authenticate()如何确定successRdirect或failureRedirect?

Facebook护照身份验证,导出passport.authenticate方法

在发布路线上使用 nodemailer 发送电子邮件并使用 passport.authenticate 将用户保存到 mongodb

passport-local-mongoose:createStrategy 不是一个函数/authenticate 不是一个函数