【问题标题】:CSRF verification failed. Request aborted. When I send POST requestCSRF 验证失败。请求中止。当我发送 POST 请求时
【发布时间】:2016-07-07 15:40:54
【问题描述】:

我正在从一个 android 应用程序向我的服务器发送一个 POST 请求,但是我收到了这个错误:

POST 看起来像: http://example/my_page_url/1000 其中 1000 是一个 ID。

这是我的观点方法:

def inventory(request, cross_id):

    text_file = open("test.txt", "w")
    text_file.write('POST Received')

    text_file.write(cross_id.__str__())
    text_file.close()

    return render(request, 'Inventory.html', {})

我的模板代码:

<form action='' method="POST">

     <button type="submit" id="btn_save" name="btn_save">Save</button>

    {% csrf_token %}

</form>

实际上,我并不需要调用模板,因为我只想在服务器上执行某些操作。但我现在调用模板只是为了防止出现任何错误。

我已经阅读了相同问题的其他答案,但他们都错过了模板中的 CSRF 令牌或视图方法中的其他内容,但我相信这里的情况有所不同。

【问题讨论】:

  • 您实际上是在发布该表单还是其他内容?
  • 否,POST 来自安卓应用。为了测试,我现在从 Postman 应用程序发布以获取错误消息。
  • 那么是的,您需要在您的发布请求中包含一个有效的 csrf 令牌
  • @NawwarMokayes 也负责 CORS。
  • 是的,谢谢你,我必须搜索如何做到这一点。我从未尝试从外部请求中包含令牌。谢谢

标签: django


【解决方案1】:

您需要将X-CSRFToken 标头添加到您的所有 POST 请求中。

您可以从名为 csrftoken 的 cookie 中获取此标头的适当值。

要在 Postman 中进行测试,您需要启用 Interceptor 插件(右上角)。

安装后,向/admin/login/ 发出GET 请求(确保您已在浏览器中从该站点注销)。在 cookie 部分你应该看到一个名为 csrftoken 的 cookie,复制它的值。

现在,将同一 URL (/admin/login) 的请求类型设置为 POST,使用您之前复制的值添加名为 X-CSRFToken 的标头。在Body 部分设置usernamepassword 字段并点击发送。

如果您的 POST 不需要身份验证,您可以使用之前 GET 请求中的csrftoken

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 2017-06-17
    • 1970-01-01
    • 2012-12-07
    • 2015-03-08
    • 2016-08-27
    相关资源
    最近更新 更多