如何解决Postman和Django 403 Forbidden Error: CSRF verification failed()
了解如何处理 Django 403 Forbidden Error: CSRF Verification failed
文章图片
如何修复403 Forbidden Error: CSRF verification failed?在本文中,我将向你解释在通过 Postman 向你的 Django 项目发送请求时规避此异常的 2 种可能方法。
A. 禁用特定视图的 CSRF 保护403 Forbidden Error: CSRF verification failed解决办法:禁用真实项目的 CSRF 保护或真正需要它的东西不是任何人的想法。除非你知道自己在做什么(你完全了解 CSRF 攻击是如何发生的,以及如果你允许在没有 CSRF 保护的情况下提交表单,这对你的应用程序有何影响),你不应该明确地这样做。使用这种方法可行的一些情况:
- 你仅在本地测试的本地 API。
- 一个公共 API,旨在供任何人访问,但不知何故你信任所有可能的请求(例如,你的 API 只能被特定 IP 访问,例如从该端点请求信息的另一台服务器的 IP,并且它已经使用另一种语言进行了 CSRF 保护,例如PHP)。
# views.py
from django.http import JsonResponse# 1. Import the csrf_exempt decorator
from django.views.decorators.csrf import csrf_exempt# 2. Exempt the view from CSRF checks
@csrf_exempt
def extract_keywords(request):
text = request.POST.get('text')
return JsonResponse(text)
装饰器将禁用路由的 CSRF 检查,在这种情况下是视图的 extract_keywords 方法。如果用 Postman 再次将 POST 请求发送到相同的路由,这次应该会成功。
B. 在 Postman 中自动设置 X-CSRFToken 标头如何修复403 Forbidden Error: CSRF verification failed?仅当你面临以下情况时,第二个选项才有效。如果你有一个 Django 项目正常工作,让我们在以下 URL http://localhost:8080/my-form 中说,它会回答
GET
和POST
请求。你的项目运行正常,当你通过 GET 请求通过浏览器访问表单地址时,将呈现表单以便用户可以轻松提交数据,当通过 POST 请求提交时,请求在浏览器中按预期成功。Postman在浏览器中工作的时候就会出现这个问题,但是如果你尝试使用Postman模拟POST请求到同一个地址,就会出现上面提到的异常。如前所述,Django 内置了 CSRF 保护。启用此保护时,你必须触发 AJAX 请求的唯一机制是将 X-CSRFToken 标头添加到你的请求(它应包含有效的 CSRF 令牌以在服务器中进行验证)。你可以先获取此令牌,然后触发对端点的 GET 请求以获取令牌,然后使用 Postman 测试脚本通过 JavaScript 添加所需标头来操作后续请求。
为此,请打开postman请求的“测试”选项卡并添加以下测试代码:
var xsrfCookie = postman.getResponseCookie("csrftoken");
postman.setEnvironmentVariable('csrftoken', xsrfCookie.value);
收到响应后执行此测试 JavaScript。一旦它在那里,运行 GET 请求:
文章图片
我们对前面的代码所做的基本上是提取通过 G??ET 请求获得的表单的 csrftoken,现在将在后续的 POST 请求中使用它来验证表单。此令牌将存储为环境变量,即
csrftoken
,因此我们可以轻松地将其作为新标头添加到新的 POST 请求中:文章图片
声明标头后,只需运行 POST 请求,它现在应该会成功:
文章图片
推荐阅读
- 如何修复VirtualBox错误(Call to NEMR0InitVMPart2 failed VERR_NEM_INIT_FAILED (VERR_NEM_VM_CREATE_FAILED))
- 如何使用JavaScript轻松生成Beep(通知)声音()
- 如何解决Windows打字延迟问题(分步指南)
- 如何在Windows 10中查看和清除剪贴板历史记录()
- 如何在Windows 10中设置环绕声(分步指南)
- 什么是Windows 10 UAC(如何禁用UAC?)
- 如何创建你自己的AR名片或动画3D明信片()
- XR Unity用法示例(如何创建自己的支持AR的T恤())
- 如何为Windows 10域或工作组PC配置自动登录()
- 电动汽车充电需要多长时间(如何估计充电时长?)