生成构建的ember app工作,但使用ember serve时,cookie不会发送到api

时间:2015-09-23 07:10:47

标签: rest cookies ember.js ember-cli

我在localhost:8001/my_app/api/上运行了一个rest API,我有apache设置来从localhost/my_app/api反向代理它。这很好。

为了拥有对api执行任何操作的权限,它需要我的会话Cookie,我的csrftoken Cookie 一个X-CSRFToken HTTP标头。我已将adapters/application.js配置如下:

适配器/ application.js中

import Ember from 'ember';
import DRFAdapter from './drf';

export default DRFAdapter.extend({

   headers: Ember.computed(function() {
    return {
      'X-CSRFToken': Ember.get(document.cookie.match(/csrftoken\=([^;]*)/), '1'),
      };
    }).volatile(),

   ajax: function(url, method, hash) {
       hash = hash || {}; // hash may be undefined
       hash.crossDomain = true;
       hash.xhrFields = {withCredentials: true};
       return this._super(url, method, hash);
   }
});

如果我执行ember build -prod并将dist目录的内容复制到/var/www/myApp/,则apache会为我的应用程序提供服务,而且工作正常。

当我尝试使用ember-cli的内置开发服务器时遇到问题。我从api收到403错误。事实证明,虽然X-CSRFToken标题正在发送我的Cookie中没有。如果我查看我的chrome开发人员工具,它会显示我有两个Cookie - 它们根本不在请求标头中。他们都来自localhost,所以我有点困惑。

另外,我目前在休息后端设置上有CORS。以下是我目前收到的标题:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:4200

我认为,因为allow-credentials == trueallow-origin != *应该允许使用Cookie。叹息。

这是我的API_HOST和contentSecurityPolicy:

配置/ environment.js

if (environment === 'development') {
    ENV.APP.LOG_TRANSITIONS = true;
    ENV.APP.API_HOST = "http://localhost"
    ENV.contentSecurityPolicy = {
      'default-src': "'none'",
      'script-src': "'self' 'unsafe-eval' localhost",
      'font-src': "'self'",
      'connect-src': "'self' localhost",
      'img-src': "'self'",
      'style-src': "'self'",
      'media-src': "'self'"
   };
 }

如上所示,api请求是通过我的反向代理发送的。我使用ember serve --proxy同时尝试了http://localhost:80/http://localhost:8001/,但两人都没有帮助。我也尝试使用和不使用各种代理值来设置我的开发ENV.API_HOST = 'http://localhost:8001/';

这个编辑,构建,部署,刷新我的浏览器,测试和&重复过程真的慢,变老真的快。

有人可以向我解释如何让ember-cli开发服务器正确访问我的其他API吗?

0 个答案:

没有答案