【问题标题】:How to restrict access to a url if it does not contain a particular header如果 URL 不包含特定标头,如何限制对 URL 的访问
【发布时间】:2021-07-13 12:35:53
【问题描述】:

我正在实现一个可由不同用户调用的 API,我希望通过名为“租户”的标头提供用户 ID,否则如果未提供,则应抛出错误消息。

    if (! request.get('Tenant')) {
      return res.status(403).json({ error: 'No tenant header sent!' });
    }
    next();
  }, router);

我已经尝试了上面的代码,但是当租户标头未作为请求的一部分发送时,它不会限制访问。

【问题讨论】:

    标签: node.js express routes


    【解决方案1】:

    获取标题并查找其中的值

    let headers = JSON.stringify(req.headers);
    

    headers 值会是这样的

        {
           "host":"localhost:8081",
           "connection":"keep-alive",
           "cache-control":"max-age=0",
           "accept-encoding":"gzip, deflate, sdch",
           "accept-language":"en-US,en;q=0.8,et;q=0.6"
       }
    
    
     for(let x in headers) {
          if(x['headers'] !== 'tenant'){
             return res.status(403).json({ error: 'No tenant information found!' });
          }else{
             res.redirect(301, '/otherEndpoint')
               or
             res.status(301).location('/otherEndpoint')
         }
       }
    

    req.get('tenant'); 也适用于 express 版本 4 及更高版本

    或者你也可以直接使用req.header('tenant')查看

    【讨论】:

    • 一旦验证了租户标头的存在,如何将请求重定向到适当的端点?
    • @HighZedd 是否回答了您的问题。如果有帮助,请接受答案。谢谢
    • 它确实回答了这个问题。
    猜你喜欢
    • 2011-06-18
    • 2013-07-16
    • 2015-12-15
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多