В моем 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", и затем я отправляю свой запрос ajax. После запроса я повторяю sh снова. Я уверен, что значение токена csrf меняется каждый раз, когда я обновляю его, когда пользователь входит в систему или выходит, но сервер всегда говорит «запрещено».
Я вставил этот код в мой файл settings.py:
CSRF_HEADER_NAME = "HTTP_XCSRF_TOKEN"
и я отправляю ajax запрос с заголовком XCSRF_TOKEN
Может ли кто-нибудь мне помочь?
Извините за мой английский SH