【问题标题】:Permissive CORS check in meanjs.org application during development?在开发期间允许 CORS 检查 meanjs.org 应用程序?
【发布时间】:2016-04-10 06:05:37
【问题描述】:

我正在使用 meanjs.org 堆栈来开发一个简单的应用程序。现在我正在使用离子框架在移动客户端上工作。

我遇到的当前问题是,在测试 ionic 应用程序时,CORS 检查会导致错误,如下所述:http://blog.ionic.io/handling-cors-issues-in-ionic/ 虽然我可以按照该链接中的说明设置代理,但如果我将响应标头添加到服务器端,它也可以工作,例如:res.header("Access-Control-Allow-Origin", "*");

将此添加到每个端点感觉不好,我想找到一个在开发期间使用的解决方案,我可以禁用 CORS 检查。

我也尝试过更改 config/env/default.js 上的 lusca 配置设置 xssProtection: false 位不起作用?

在开发过程中,如何在所有端点中启用以下响应标头res.header("Access-Control-Allow-Origin", "*");,是否有可能或在开发过程中使用 meanjs.org + ionic 的唯一可行解决方案是设置代理?

谢谢

【问题讨论】:

  • 如果您添加代理,则无需将 res.header 设置为服务器端。它只适用于代理

标签: ionic-framework cors mean-stack meanjs


【解决方案1】:

对于开发,您可以设置代理以避免 CORS 问题,

将您的 ionic.project 文件设置为:

{
 "name": "proxy-example",
 "app_id": "",
 "proxies": [{
  "path": "/api",
  "proxyUrl": "http://example.com/api"
 }]
}

然后像下面这样从控制器调用 api,

.controller('MyController', function($http) {
     $http.post('/api/getMoreDeatils',data)
          .then(function (response) {
       //do something
     })
})

希望对你有帮助

【讨论】:

  • 感谢您提供帮助,但正如我在问题中提到的那样,我正在寻找一种解决方案,可以通过服务器端 API 实现上的标志启用或禁用此功能。我们已经知道的问题中描述的代理方法。问候。
【解决方案2】:

尝试在你的服务器主文件中使用这样的中间件:

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

【讨论】:

    【解决方案3】:

    一段时间后,我终于在 meanjs.org 论坛上得到了提示并构建了一个解决方案。

    在 config/lib/express.js 文件上创建以下方法:

    /**
     * Disable CORS check to be used during development with access from mobile clients (currently tested with ionic)
     */
    module.exports.disableCORSForDev = function(app) {
      app.all('/*', function(req, res, next) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Credentials', true);
        res.header('Access-Control-Allow-Methods', 'POST');
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
        next();
      }).options('*', function(req, res) {
        res.end();
      });
      var corsOptionsDelegate = function(req, callback) {
        var corsOptions = { credentials: true };
        callback(null, corsOptions); // callback expects two parameters: error and options
      };
      app.use(cors(corsOptionsDelegate));
    };
    

    在声明 var app = express(); 之后将以下内容添加到同一类的方法 init 中

    var app = express();
    
    this.disableCORSForDev(app);
    

    注意:这是一个在开发过程中绕过 cors 的服务器端解决方案,不应在生产中使用,许多人可能更喜欢在 ionic 客户端上设置代理,而不是在 @987654321 中描述@。

    【讨论】:

      猜你喜欢
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2013-03-29
      • 2021-05-02
      • 1970-01-01
      • 2020-11-16
      相关资源
      最近更新 更多