Получение текущего зарегистрированного пользователя в django Rest Framework
Я пытаюсь получить текущего залогиненного пользователя и загрузить/отправить информацию на фронтенд. Я новичок в Rest Framework, поэтому простите мой вопрос на базовом уровне.
Я пробовал получить пользователя с помощью request.user
и request.auth
в моих представлениях, но я не могу просто получить пользователя.
Это мой views.py
from rest_framework.authtoken.models import Token
def get_User (request):
# current_user = request.user
# context = {"user": current_user}
# print(request.user.username)
user_id = Token.objects.get(key=request.auth.key).user_id
print(request.auth)
# Response(context)
Я использую пользовательскую модель пользователя для хранения данных.
Каждый раз, когда я запускаю request.auth
или request.user
, я вижу в терминале django, что он продолжает переходить к URL /verify-auth-token/.
Как сделать так, чтобы пользовательская печать, также отправленная на фронтенд в React, отображалась и в приложении. Любая помощь будет принята с благодарностью.
Сначала убедитесь, что в настройках MIDDLEWARE_CLASSES добавлены промежуточные модули SessionMiddleware и AuthenticationMiddleware.
Текущий пользователь находится в объекте request, вы можете получить его по:
def sample_view(request): current_user = request.user print(current_user)
request.user передаст вам объект User, представляющий вошедшего в систему пользователя. Если пользователь не вошел в систему, request.user будет установлен в экземпляр AnonymousUser. Вы можете отличить их с помощью поля is_authenticated, например, так:
if request.user.is_authenticated: # Сделайте что-нибудь для аутентифицированных пользователей. else: # Сделайте что-нибудь для анонимных пользователей.
Надеюсь, что это сработает!!!
Спасибо!!!
Если вы работаете с DRF и хотите передать информацию вашему фронтенду, вы не можете использовать request.user, поскольку request работает с сессиями.
Для идентификации пользователя вам нужно связать токен с пользователем, а затем передать ассоциированный объект user во фронтенд, и наоборот, вот небольшой пример :
def get_user_by_token(token):
user_id = Token.objects.get(key=request.auth.key).user_id
user = Users.object.get(id =user_id)
return JsonResponse({"user": user.id})
Таким образом, вы можете вернуть что угодно в формате JSON на ваш фронтенд, как только пользователь будет связан с токеном