Как получить текущий идентификатор пользователя Django
Я застрял с JWT, может ли кто-нибудь сказать мне, как я могу получить идентификатор пользователя вместе с токеном.
Мой url.py :
from rest_framework_jwt.views import obtain_jwt_token
from scrumboard.views import UserDetail
from scrumboard import views
urlpatterns = [
url(r'^api-token-auth/', obtain_jwt_token),
url(r'^users/$', views.UserList.as_view()),
]
Views.py:
class UserList(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetail(generics.RetrieveAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
Serializers.py:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'password')
Проблема в том, что когда я иду в api-token-auth/, он дает мне только имя пользователя и пароль, а не идентификатор.
2 ответов:
Вы можете получить токен, идентификатор пользователя и имя пользователя, выполнив следующие действия:
Внутри вашего
appсоздайте файлutils.py(на том же уровне, где serializers.py размещается).Содержание
utils.py:from .serializers import UserSerializer #you have already created UserSerializer def jwt_response_payload_handler(token, user=None, request=None): user = UserSerializer(user, context={'request': request}).data return { 'token': token, 'userid': user['id'], 'username':user['username'] }В вашем
settings.py, добавьтеJWT_AUTH = { 'JWT_RESPONSE_PAYLOAD_HANDLER': 'app_name.utils.jwt_response_payload_handler', #app_name is name of the app which contains utils.py }Теперь, когда вы нажмете api (api-token-auth/), чтобы получить токен, он ответит с помощью токена, идентификатора пользователя и имени пользователя.
Пример ответа:
{ 'token':'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImdhbmVzaG5lZ2lAZ21haWwuY29tIiwiZXhwIjoxNTI0NTAyNzIzLCJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImdhbmVzaG5lZ2kifQ.RxnYF1gwaYywSnnWC-ngrcZaw90lpD6Rq7jcbnEoZVk', 'userid':1, 'username':'ganeshnegi' }
В соответствии с
django-rest-framework-jwtdocs это представление возвращает только имя пользователя и пароль (выделено мной).В вашем urls.py добавьте [
url(r'^api-token-auth/', obtain_jwt_token)], чтобы разрешить получение токена через сообщение, включающее имя пользователя и пароль.Я бы не беспокоился о том, чтобы не получить идентификатор, вы должны иметь возможность запрашивать таблицу пользователей по имени пользователя.
Comments