Как я могу вернуть идентификатор пользователя с помощью токена в Django?

Я генерирую токены, используя представление по умолчанию в Django:

url(r'^login/', rest_auth_views.obtain_auth_token), 

У меня проблема, потому что мой интерфейс не знает, что входит в текущий идентификатор пользователя.

Должен ли я вернуть его с помощью токена или создать другой запрос?

Я знаю, что существует много разных способов, но я бы хотел выбрать наиболее оптимальное решение.

3 Solutions collect form web for “Как я могу вернуть идентификатор пользователя с помощью токена в Django?”

Вы можете переопределить rest_framework.authtoken.views.ObtainAuthToken.post , чтобы получить rest_framework.authtoken.views.ObtainAuthToken.post результат.

MyApp / views.py

 from rest_framework.authtoken.views import ObtainAuthToken from rest_framework.authtoken.models import Token from rest_framework.response import Response class CustomObtainAuthToken(ObtainAuthToken): def post(self, request, *args, **kwargs): response = super(CustomObtainAuthToken, self).post(request, *args, **kwargs) token = Token.objects.get(key=response.data['token']) return Response({'token': token.key, 'id': token.user_id}) 

MyApp / urls.py

 from django.conf.urls import url from .views import CustomObtainAuthToken urlpatterns = [ url(r'^authenticate/', CustomObtainAuthToken.as_view()), ] 

Примеры результатов

 $ http :8000/authenticate/ username=someuser password=secretpassword HTTP/1.0 200 OK Allow: POST, OPTIONS Content-Language: en Content-Type: application/json Date: Tue, 22 Mar 2017 18:30:10 GMT Server: WSGIServer/0.2 CPython/3.5.1 Vary: Accept-Language, Cookie X-Frame-Options: SAMEORIGIN { "id": 16, "token": "82e0bc9980a6b2c9a70969b0f8dc974418dda399" } 

Идея здесь состоит в том, чтобы переопределить метод post класса представления ObtainAuthToken. Здесь все, что я сделал, это вызвать родительский класс, чтобы получить токен, а затем найти этот токен, чтобы найти связанный идентификатор пользователя.

Надеюсь, это поможет.

если вам нужно получить информацию о пользователях на веб-странице, вам необходимо передать информацию о пользователе в ответ API входа или другого API.

При использовании аутентификации на основе токенов после входа в систему генерируются токен доступа и токен обновления, которые должны быть предоставлены клиенту в ответе API входа. Этот токен доступа передается в заголовке как:

 Authorization : Bearer <insert token here> 

Вам нужно поставить authentication_classes = [OAuth2Authentication] в ваше представление.

Это подтвердит, что если пользователь выполнит вход в систему, вы также получите доступ к зарегистрированной в пользовательской информации user=request.user .

Я считаю, что хорошей практикой будет возврат данных пользователя в ответ на login api.

Если ваш встроенный просмотр не возвращает данные пользователя, вы можете переопределить метод obtain_auth_token . Я однажды сделал это для djangorestframework-jwt получил метод токена

 def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) if serializer.is_valid(): user = serializer.object.get('user') or request.user token = serializer.object.get('token') response_data = { 'token': token, 'user': UserSerializer(user).data } response = Response(response_data, status=status.HTTP_200_OK) if api_settings.JWT_AUTH_COOKIE: expiration = (datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA) response.set_cookie(api_settings.JWT_AUTH_COOKIE, response.data['token'], expires=expiration, httponly=True) return response return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

по умолчанию у response_data dict были только данные с token я добавил объект пользователя, чтобы добиться того, что вы пытаетесь сделать.

  • Форматирование микросекунд до двух знаков после запятой (фактически преобразование микросекунд в десятки микросекунд)
  • Вход в командную строку в Python
  • Python: многопроцессорность и запросы
  • AttributeError: объект 'FreqDist' не имеет атрибута 'inc'
  • теги html верхнего регистра, закодированные в lxml
  • Python 2.7: дочерний поток не поймает KeyboardInterrupt
  • Запрос ввода всегда внизу
  • setup.py не устанавливать файлы данных
  • Python - лучший язык программирования в мире.