cookie使用Django和CORS在AngularJS应用程序中消失了

时间:2013-08-15 11:11:53

标签: django angularjs cors django-rest-framework django-cors-headers

我正在使用Django Rest Framework和Django CORS Headers构建一个AngularJS应用程序作为后端API。

直到今天,一切都很好。突然,csrfcookiesessionid cookie停止在Chrome中显示。

我看到API使用csrfcookie回复了我。 Chrome不会在开发工具中显示它,但我会在chrome://settings/cookies中看到它。

AngularJS

$httpProvider.defaults.useXDomain = true;
$http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
$http({withCredentials: true, ...})

Django API

CORS_ALLOW_CREDENTIALS = True

CORS_ALLOW_HEADERS = (
    'x-requested-with',
    'content-type',
    'accept',
    'origin',
    'authorization',
    'X-CSRFToken'
)

1 个答案:

答案 0 :(得分:0)

好的,所以这个问题的答案非常简单,但并不总是很容易注意到,因为API和客户端都没有错误消息。

enter image description here

上面的问题是我在浏览器中驻留在 domain.com ,但我对API的请求是“www.domain.com:8000” www.domain.com domain.com 都可以在我的API中使用。

结论是,如果我居住在 domain.com ,那么我需要向 domain.com:8000 发出我的API请求。但如果我的浏览器中存在 www.domain.com ,那么我需要向 www.domain.com:8000 提出我的API请求。

下面的一个工作示例:

enter image description here

Cookies现在显得很好!

我希望这可以帮助任何人,节省几个小时的挫折:)

<强>更新 在Django设置文件中启用以下设置也将解决此问题。使用它们让您驻留在浏览器中的不同子域中,并且cookie将返回域“.domain.com”

https://docs.djangoproject.com/en/dev/ref/settings/#csrf-cookie-domain https://docs.djangoproject.com/en/dev/ref/settings/#session-cookie-domain

感谢irc.freenode.net上的apollo,#django更新了答案。