繁体   English   中英

我登录时 csrf 验证失败

[英]csrf validation failed when I login

我在我的 django 后端有一个名为getUserInfo的视图,它将以 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 请求工作正常但是当我登录到一个用户帐户时,我收到一个“禁止”错误,它说 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”的 csrf-token 值的全局变量,然后我发送我的 ajax 请求。 请求后,我再次刷新它。 我确定每次我在用户登录或注销时刷新它时 csrf 令牌的值都会改变,但服务器总是说“禁止”。

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

CSRF_HEADER_NAME = "HTTP_XCSRF_TOKEN"

我正在发送带有名为 XCSRF_TOKEN 的标头的 ajax 请求

谁能帮我?

对不起我的英语不好

也许尝试:

headers: {
        "HTTP_XCSRF_TOKEN": csrf
      },

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM