Set-Cookie响应头不能使用Angular 2 + django-rest-framework

时间:2017-01-10 22:13:43

标签: django angular cookies django-rest-framework

我正在开发一个使用django-rest-framework后端的Angular 2应用程序。我正在使用开发服务器(来自angular-cli的ng服务)和另一个用于django(默认来自manage.py)的测试。两个服务器都可以从127.0.0.1访问,但在不同的端口上。

我的身份验证系统基于django-rest-framework提供的cookie。使用django-rest-framework中的视图时,一切正常。

当我尝试从角度2登录时,我收到一个带有Set-Cookie标头的有效响应。问题是cookie从未在浏览器中设置(在chrome和firefox中测试)。

这是一个CORS问题吗?我使用以下参数安装了corsheader app

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

1 个答案:

答案 0 :(得分:0)

据我了解django-cors(基本上是cors),你不能同时设置allow all和allow credentials,这是来自cors中间件:

if conf.CORS_ORIGIN_ALLOW_ALL and not conf.CORS_ALLOW_CREDENTIALS:
            response[ACCESS_CONTROL_ALLOW_ORIGIN] = "*"
else:
    response[ACCESS_CONTROL_ALLOW_ORIGIN] = origin
    patch_vary_headers(response, ['Origin'])

所以基本上你需要正确设置原点 - 因为你们两个真人都去了else区块;

您可以在此处详细了解:MDN CORS,尤其是此片段:

“重要提示:在响应凭证请求时,服务器必须指定一个域,并且不能使用通配符。如果标头通配符为以下示例将失败:Access-Control-Allow-Origin:*。 Access-Control-Allow-Origin明确提到http://foo.example,凭证识别内容返回到调用Web内容。请注意,在第22行中,设置了另一个cookie。如果失败,则例外,取决于使用的API被提出。“