【问题标题】:Angular + Django: Sending POST request with cookies (CORS)Angular + Django:使用 cookie (CORS) 发送 POST 请求
【发布时间】:2018-07-20 01:02:45
【问题描述】:

我正在开发一个应用程序,客户端使用 Angular,服务器端使用 Django。在开发过程中,我在端口 8000 中运行 Django 来管理所有 API 请求,并使用在端口 4200 上运行的 Angular CLI 为我的客户端应用程序提供服务。

向 Django 发送 GET 请求没有问题,但是当我尝试发送包含一些带有会话信息的 cookie 的 POST 请求时,它会失败,因为 cookie 不包含在标头中。

我知道这个“问题”的根源是 CORS 问题 [read more here] 并且在生产中不会出现问题,因为客户端和服务器应用程序都将在同一服务器和端口中运行,但是我想知道我该如何解决这种情况,至少是为了开发。

我尝试使用 django-cors-headers module 并将选项 CORS_ALLOW_CREDENTIALSCORS_ORIGIN_ALLOW_ALL 设置为 True,但没有成功。

有什么想法吗?

【问题讨论】:

    标签: ajax django angular cookies cors


    【解决方案1】:

    最后我设法使所有工作。

    我以为是 Django 的问题所以我安装了 django-cors-headers 模块,但是“问题”在浏览器中(实际上不是问题,这是一个安全问题,请参阅 [这里][1] )。

    无论如何,我为我的 Angular CLI 使用 代理规则 解决了这个问题,如下所示:

    • 首先,我没有将我的请求发送到 http://localhost:8000/api/...,而是将它们发送到 /api/(即发送到在端口 4200 上运行的 Angular 服务器) .
    • 然后我在我的 Angular 项目中添加了一个名为“proxy.conf.json”的文件,其内容如下: { "/api": { "target": "http://localhost:8000", "secure": false } }
    • 最后,我将标志“--proxy-config”添加到 Angular CLI 服务器: ng serve --watch **--proxy-config proxy.conf.json**

    现在,所有 API 请求都发送到端口 4200,Angular 在内部将它们重定向到 Django,避免了 CORS 问题。

    注意:有了这个解决方案,我不再需要 django-cors-headers 模块。

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2018-06-18
      • 2013-03-08
      • 1970-01-01
      • 2011-07-15
      • 2012-02-10
      • 2023-04-09
      相关资源
      最近更新 更多