首页 > 解决方案 > 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 装饰器,但在我的情况下它不起作用。有人请帮忙。

标签: djangovue.jssecuritycsrf

解决方案


CSRF 是一种防止跨站请求伪造的保护。它通过生成标识表单的唯一令牌来工作。因此,如果您在没有给您的令牌的情况下将数据发送到您的服务器(例如通过 cookie),它将不会接受它。

如果你打开了 CSRF 中间件,你应该不需要 CSRF 保护装饰器!


推荐阅读