【问题标题】:Nodejs cors allow all origins for certain routesNodejs cors 允许某些路由的所有来源
【发布时间】:2020-06-29 04:17:38
【问题描述】:

我有一个使用 express 的 Node.js 后端,它只允许来自特定来源的请求(我们称之为localhost:8998)。我想为后端创建一个公共 API,但是,使用令牌而不是源授权。

甚至可以创建这种类型的路线吗?

当请求的路由是公共 API 路由之一时,我正在考虑通过将 Access-Control-Allow-Origin 标头设置为请求的来源来解决此问题。像这样的:

app.use(function(req, res, next) {
    var origin = req.get('origin');
    res.header("Access-Control-Allow-Origin", origin);
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

似乎我违背了Access-Control-Allow-Origin 标头的初衷。想听听你们对这个/我应该如何实现公共 API 的想法。

【问题讨论】:

    标签: node.js express cors


    【解决方案1】:

    制作中间件:

    const allowCORS = function(req, res, next) {
        var origin = req.get('origin');
        res.header("Access-Control-Allow-Origin", origin);
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();
    };
    
    const allowAllIfAuthorized = function(req, res, next) {
      if (req.isAuthorized) {
        return allowAll(req, res, next);
      } 
      next();
    };
    
    const allowedTokens = [...];
    const isAuthorized = function(req, res, next) {
      req.isAuthorized = (
        req.query.accessToken 
        && allowedTokens.includes(req.query.accessToken)
      );
      next();
    }
    

    并附加在某些路线中:

    app.get('/', (req, res) => res.render('index'));
    
    app.use(
      '/api', 
      allowCORS, // allow cors for public api
      require('./api'));
    
    app.use(
      '/private/api', 
      isAuthorized, allowCORSIfAuthorized, // allow cors if user authorized
      require('./private/api'));
    

    我想为后端创建一个公共 API,但是使用令牌而不是源授权。

    所以它应该是所有地方的 cors all 规则,您正在使用授权用户将拥有的访问令牌来防止私人访问。

    总结:CORS 不是未经授权用户的防火墙(网守)

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2020-12-29
      • 2012-06-17
      • 2019-08-01
      • 1970-01-01
      • 2013-11-28
      • 2021-05-13
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多