【问题标题】:Express passport middleware not woriking with get request paramsExpress 护照中间件不能与获取请求参数一起使用
【发布时间】:2017-10-28 21:50:22
【问题描述】:

我正在构建一个带有节点、快递、jwt 和护照的网络服务器。但是当我尝试使用 get 方法进行路由时:

app.get('/api/:key/lights', passport.authenticate("jwt", {session: false}), function(req, res) {
if (yubiAtHome) {
var sKey = req.params.key;
dbController.checkApiKey(sKey, function(err, bData) {
  if (bData.status) {
    hueController.getLights(function(err, jData) {
      if (err) {
        generateResponse(res, 'get Lights', null, err, 'lLights', 500);
      } else {
        generateResponse(res, 'get Lights', jData, null, 'lLights', 200);
      }
    });
  } else {
     generateResponse(res, 'api key not valid', bData, 'apikey invalid', 'lLights', 500);
     }
    });
   } else {
      generateResponse(res, 'yub not pressent', null, 'yub not pressent', 'lLights', 500);
  }
});

但是由于某种原因,这条路线不起作用,如果我删除 passport.authenticate("jwt", {session: false}) 或删除参数(“:key”)它可以工作,但否则它不会并返回 401:未授权。怎么会这样 ?

编辑

这是我尝试访问路线的方式:

【问题讨论】:

  • 如果它不能与护照中间件一起工作,也许你有一个身份验证问题。如果它不适用于某个 url 模式,请确保您尝试使用此模式并确保在此控制器之前没有任何其他路由可以匹配此模式。
  • 我都检查过了,我只有一条路线,路线上有更多参数。而我的默认路由app.get('/', passport.authenticate("jwt", { session: false }), function(req, res) { res.sendFile(__dirname + '/public/index.html'); }); 正在运行..
  • 你能告诉我们,你是如何尝试访问这条路线的? (例如作为邮递员或测试用例或通过浏览器......任何东西)
  • @LeandroRodrigues 更新了问题。
  • 嗯.. 所以,如果你从你的路由中删除 ':key',它就变成了 /api/lights。如果您发送http://localhost/api/lights 是否有效?

标签: node.js express jwt passport.js


【解决方案1】:

尝试去掉标题Authorization中的引号。

我这里是我的测试,当我加引号时,它不起作用。

例如:

授权而不是“授权”

【讨论】:

  • 试过了,什么都没做.. :-\
  • 看,在您的邮递员示例中,您使用的是标题:Authentication,但正确的是Authorization。你试过改变它吗?
  • 哦……天哪,这只是一个愚蠢的错误……天哪……谢谢你发现那个愚蠢的错误……
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 2015-11-22
  • 2020-02-12
  • 1970-01-01
相关资源
最近更新 更多