[英]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.