`/` 上的表单中的 CSRF 令牌丢失或不正确
Posted
技术标签:
【中文标题】`/` 上的表单中的 CSRF 令牌丢失或不正确【英文标题】:CSRF token missing or incorrect from form on `/` 【发布时间】:2018-06-20 07:11:46 【问题描述】:我有这个在urls.py
:
url("^$", direct_to_template, "template": "index.html", name="home"),
url("^searched-location", views.searched_location, name="searched_location"),
我有这个在index.html
:
% extends "base.html" %
% load pages_tags mezzanine_tags i18n staticfiles %
% block main %
<form id="my-form class="input-group">
% csrf_token %
<input type="text" class="form-control">
<script src="% static "script/script.js" %"></script>
</form>
% endblock %
script.js
有这一行:
document.getElementById("my-form").addEventListener("submit",function(event)
event.preventDefault();
,false);
function when_User_Types_Something_Send_That_Stuff_To_The_Backend(typedStuff)
// some code
$.post("/searched-location",typed_stuff: stuff_the_user_typed);
views.py
有这个:
def searched_location(request):
print request
# More code here
问题是当我在本地运行python manage.py runserver
时,我的终端出现此错误:
Forbidden (CSRF token missing or incorrect.): /searched-location
[11/Jan/2018 01:57:06] "POST /searched-location HTTP/1.1" 403 2502
为什么 CSRF 令牌丢失或不正确?如何找到或更正它?
【问题讨论】:
$.post("/searched-location",typed_stuff: stuff_the_user_typed);
不包含 csrf 令牌。
我没有看到您的表单和发布到搜索位置的代码之间的联系。
文档展示了如何使用 jQuery 来实现这一点:docs.djangoproject.com/en/2.0/ref/csrf
【参考方案1】:
您没有在 POST 请求中包含 CSRF 令牌。
将您的代码更改为:
$.post("/searched-location",typed_stuff: stuff_the_user_typed, csrfmiddlewaretoken: $("input[name=csrfmiddlewaretoken]").val());
将其包含在您的请求中。
【讨论】:
以上是关于`/` 上的表单中的 CSRF 令牌丢失或不正确的主要内容,如果未能解决你的问题,请参考以下文章
注册表单不起作用(CSRF 令牌丢失或不正确。) django