【问题标题】:Express: How to protect multiple routes with JSON web tokenExpress:如何使用 JSON Web 令牌保护多个路由
【发布时间】:2018-05-13 20:32:47
【问题描述】:

我真的只是在寻找一种方法来清理我的代码。我有几条这样的路由,请注意,每条路由都单独经过 JSON Web 令牌验证过程。

router.route('/some-route').post((req, res) => {
  jwt.verify(req.body.token, secret, (err, decoded) => {
    if (err) return console.log(err);
    // do something
    res.json({ some: 'response data' });
  });
});

router.route('/some-other-route').post((req, res) => {
  jwt.verify(req.body.token, secret, (err, decoded) => {
    if (err) return console.log(err);
    // do something else
    res.json({ some: 'response data' });
  });
});

还有其他方法吗?我的一些路由正在接近回调地狱级别的嵌套,所以最好从每条路由中消除它。

【问题讨论】:

    标签: javascript node.js express json-web-token


    【解决方案1】:

    很确定你可以告诉路由器use作为中间件的功能。将为router 中的每个路由调用该函数。

    router.use((req, res, next) => {
      if(!req.body.token)
        return res.json({ message: 'Missing token.' });
    
      jwt.verify(req.body.token, secret, (err, decoded) => {
        if (err) return res.json({ message: 'Failed to authenticate token.' });
        // do something else
        req.decoded = decoded
        next();
      });
    });
    

    【讨论】:

    • 是否仍然可以将我的“解码”参数传递到路由中?
    • 啊,是的,你可以在next() 之前执行req.decoded = decoded。我将其添加到我的答案中。
    • 我认为中间件上方的任何路由都不会使用它,而中间件下方的任何路由都会使用它,这是否正确?
    • 是的,这听起来很正确。无论如何应该很容易测试
    • 再次感谢,这为我节省了大约 40 行代码!
    猜你喜欢
    • 2014-10-18
    • 2021-05-03
    • 2015-10-27
    • 2016-09-19
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多