【问题标题】:Authenticating the request header with Express使用 Express 对请求标头进行身份验证
【发布时间】:2018-02-16 01:52:15
【问题描述】:

我想验证我们所有的 get 请求是否在其身份验证标头中都有特定的令牌。

我可以将它添加到我们的获取端点:

app.get('/events/country', function(req, res) {
    if (!req.headers.authorization) {
    return res.json({ error: 'No credentials sent!' });
    }

有没有更好的方法在 NodeJS/Express 中处理这个而不改变每个端点?类似于前置过滤器/AOP 方法?

【问题讨论】:

  • 您可以编写一个简单的快速中间件,它会检查收到的每个 HTTP 请求的授权标头。确保在处理任何路由之前 app.use() 中间件

标签: node.js express jwt aop access-token


【解决方案1】:

这就是middleware 的用途:

app.use(function(req, res, next) {
  if (!req.headers.authorization) {
    return res.status(403).json({ error: 'No credentials sent!' });
  }
  next();
});

...all your protected routes...

确保在中间件应应用的路由之前声明中间件。

【讨论】:

  • 获取请求头,推荐方式为req.get('authorization')
  • @BoLu 谁推荐的?
  • @BoLu 但它并没有说推荐使用req.get。同一文档还指出 “req 对象是 Node 自己的请求对象的增强版本,并支持所有内置字段和方法”,所以我看不出有人不应该这样做的理由正在使用req.headers
  • @PhilipKirkbride 在这种情况下,将建议的中间件分别添加到需要保护的每个路由 (app.use('/protected', auth_middleware, handler))。或者,您可以为需要保护的路由添加前缀并使用单独的express.Router (app.use('/protected', auth_middleware, router)) (example here)。
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2021-11-20
  • 2014-12-20
相关资源
最近更新 更多