【问题标题】:how to pass csrf-token in first request如何在第一个请求中传递 csrf-token
【发布时间】:2019-07-22 09:47:15
【问题描述】:

我的问题是cookies是如何工作的,当我第一次加载我的页面时,我想到了这个问题

REQUEST HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,en-US;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: csrftoken=gsZxmbW4XUpE6YnaQhlrAx9JduyExVgzWEo4fXhcY4V3fbHWVtwf0msbDQDT5r43
Host: 127.0.0.1:8000
Upgrade-Insecure-Requests: 1

当第一个请求被发送时,它已经在 cookie 中有 csrftoken

我在隐身窗口中尝试了相同的结果,也得到了相同的结果。 我的浏览器如何在没有与服务器通信的情况下已经拥有 cookie

我正在使用 Angular 7 开发 django,问题是我正在从 Angular 发送我的请求

 this.http.post('http://127.0.0.1:8000/',data,  {observe : "response", withCredentials: true } )}

但作为回应,我在 setcookie 中没有得到任何 csrftoken。

请帮助我.....很抱歉在一个问题中添加了两个问题,但两者都是间接相互关联的

【问题讨论】:

  • 所有请求我都必须通过 csrftoken,所以一个人如何发送第一次访问我的网站的请求,因为新人不会有 csrf-token。

标签: django http django-rest-framework angular7 csrf-token


【解决方案1】:

实际上,django 在 127.0.0.1 上运行,而 angular 在 localhost(任何环回地址)上运行,这就是为什么对于安全性(CORS)问题,浏览器(chrome)不允许我在请求中发送 cookie也不设置 cookie 作为响应。所以我有两种选择,一种是在浏览器中将同一站点更改为无,或者将我的角度设置更改为在 127.0.0.1 上呈现。

【讨论】:

    【解决方案2】:

    CSRF 只能停止 PUT 、 POST 和 DELETE,它总是以 GET 请求打开,如果你能够在第一次通过 GET 发送它,那就太好了。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2021-05-24
    • 2022-01-21
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多