gpt4 book ai didi

django - 使用 Django 和 CORS 的 AngularJS 应用程序中的 cookie 消失了

转载 作者:行者123 更新时间:2023-12-05 06:46:08 24 4
gpt4 key购买 nike

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

直到今天,一切都运行良好。 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'
)

最佳答案

好吧,这个问题的答案很简单,但并不总是很容易注意到,因为没有来自 API 或客户端的错误消息。

enter image description here

上面的问题是我驻留在我的浏览器中的 domain.com,但我对 API 的请求是 “www.domain.com:8000” . www.domain.comdomain.com 在我的 API 中都是允许的来源。

这里的结论是,如果我位于 domain.com,那么我需要向 domain.com:8000 发出 API 请求。但是,如果我的浏览器位于 www.domain.com,那么我需要向 www.domain.com:8000 发出 API 请求。

下面是一个工作示例:

enter image description here

Cookie 现在看起来正常了!

我希望这对任何人都有帮助,节省几个小时的挫败感:)

更新:在 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 更新了答案。

关于django - 使用 Django 和 CORS 的 AngularJS 应用程序中的 cookie 消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com