我正在使用Django Rest Framework和Django CORS Headers构建一个AngularJS应用程序作为后端API。
直到今天,一切都很好。突然,csrfcookie
和sessionid 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'
)
答案 0 :(得分:0)
好的,所以这个问题的答案非常简单,但并不总是很容易注意到,因为API和客户端都没有错误消息。
上面的问题是我在浏览器中驻留在 domain.com ,但我对API的请求是“www.domain.com:8000” 。 www.domain.com 和 domain.com 都可以在我的API中使用。
结论是,如果我居住在 domain.com ,那么我需要向
下面的一个工作示例:
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更新了答案。