django - Django csrf_protect 装饰器不起作用
问题描述
我正在使用 Django 构建一个 Web 应用程序。我在前端使用 Vue JS。我的问题是当我使用 csrf_protect 时显示 403 错误
我的看法:
@csrf_protect
def SignUpView(request):
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
username, password = form.cleaned_data.get('username'), form.cleaned_data.get('password1')
new_user = authenticate(username = username, password = password)
login(request, new_user)
return redirect('/')
else:
form = SignUpForm()
return render(request, 'Accounts/SignUp.html', {'form':form})
@csrf_protect
def validateUsername(request):
username = request.GET.get('username', None)
usernameRegEx = r'^[a-zA-Z0-9@+-_.@]*$'
usernameRegExResult = {
'valid' : bool(re.search(usernameRegEx, username, re.M|re.I)),
'is_taken' : User.objects.filter(username=username).exists()
}
return JsonResponse(usernameRegExResult)
我阅读了 Django 文档,其中说我可以在视图上方使用 csrf_protect 装饰器,但在我的情况下它不起作用。有人请帮忙。
解决方案
CSRF 是一种防止跨站请求伪造的保护。它通过生成标识表单的唯一令牌来工作。因此,如果您在没有给您的令牌的情况下将数据发送到您的服务器(例如通过 cookie),它将不会接受它。
如果你打开了 CSRF 中间件,你应该不需要 CSRF 保护装饰器!
推荐阅读
- c++ - 迭代器的 Range TS 和 C++20 概念是否需要使用 `operator->` 的能力?
- javascript - onload 和 window.onload 在 IE 中不起作用
- javascript - 使用 javascript 对象的位置变量来查找相关属性
- c# - 如何将多维数组转换为字典?
- visual-studio-2010 - TFS 签入列表仅显示修改的文件,但不显示新创建的文件
- timeout - Spring Boot - 504 网关超时
- django - 将 Django 过滤器集应用于带注释的查询集?
- database - 验证保存的 MongoDB 记录
- azure - Azure 移动应用服务 APIkey
- angular - @Host 和 @Self 在角度上有什么区别?