我登录时 csrf 验证失败

csrf validation failed when I login

我在我的 django 后端有一个名为 getUserInfo 的视图,它将 return 用户信息作为 json 格式。

这是我的观点:

@api_view(["POST"])
def getUserInfo(request):
    if request.user.username:
        serial = userInfoSerializer(request.user)
        return Response(serial.data)
    else:
        return Response({"notLoggedIn": True})

当我未登录时,ajax 请求工作正常,但当我登录用户帐户时,出现 "forbidden" 错误,它说 csrf 验证失败。每次用户登录或注销时,我也会刷新 csrf 令牌。

所以它应该可以工作,但它不工作。

这是我的 ajax 请求:

function login(){
    getcsrf();
    $.ajax({
      url: '/api/login/',
      type: 'POST',
      headers: {
        "XCSRF_TOKEN": csrf
      },
      data: {
        username: $("#l-username").val(),
        password: $("#l-password").val(),
      },
    })
    .done(function(data) {
      console.log(data)
      if(data.msg){
        console.log(data.msg)
        $(`<div class="p-2 bg-danger">`+data.msg+`</div>`).prependTo('#message-box')
      }else{
        getcsrf();
        getUserInfo();
      }
      console.log("success");
    })
    .fail(function() {
      console.log("error");
    })
    .always(function() {
      console.log("complete");
    });
}

函数 getcsrf 刷新包含 csrf-token 值的全局变量 "csrf" 然后我发送我的 ajax 请求。请求后我再次刷新它。我确定每次用户登录或注销时刷新 csrf 令牌的值都会发生变化,但服务器总是显示 "forbidden".

我已将这段代码插入到我的 settings.py 文件中:

CSRF_HEADER_NAME = "HTTP_XCSRF_TOKEN"

我正在发送 ajax 请求,其中包含一个名为 XCSRF_TOKEN

的 header

谁能帮帮我?

对不起我的英语

也许试试:

headers: {
        "HTTP_XCSRF_TOKEN": csrf
      },

以便它与您的设置文件中的 header 名称匹配。

好吧,让我自己回答。
我清除了我的浏览器 cookie,然后它正常工作