我登录时 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,然后它正常工作
我在我的 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,然后它正常工作