Почему в Django и DRF маршрут API request.user возвращает экземпляр AnonymousUser, а django.contrib.auth.get_user(request) возвращает пользователя?
Пойдем по очень простому маршруту:
class Highscore(APIView):
def get(request):
user = request.user
highscore = user.highscore
return Response({"highschore":highscore})
По какой-то неизвестной причине бывают случаи, когда, request.user
несмотря на то, что пользователь аутентифицирован и вошел в систему (!) Возвращает экземпляр Anonymous User
, а не самого пользователя.
Однако это можно обойти, используя get_user
функцию util из django.contrib.auth
.
from django.contrib.auth import get_user
class Highscore(APIView):
def get(request):
user = get_user(request)
highscore = user.highscore
return Response({"highschore":highscore})
Что может быть причиной этого?
Важное примечание: пользователь наверняка вошел в систему. Настолько, что при открытии веб-сайта администратора на другой вкладке он распознает правильного пользователя только из сеанса. Если это и администратор, он представляет содержимое администратора, а если нет, то дает "вы вошли в систему как ..., но это представление зарезервировано для пользователей-администраторов."