Как получить текущий идентификатор пользователя 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/, он дает мне только имя пользователя и пароль, а не идентификатор.

820   2  

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-jwt docs это представление возвращает только имя пользователя и пароль (выделено мной).

В вашем urls.py добавьте [url(r'^api-token-auth/', obtain_jwt_token)], чтобы разрешить получение токена через сообщение, включающее имя пользователя и пароль.

Я бы не беспокоился о том, чтобы не получить идентификатор, вы должны иметь возможность запрашивать таблицу пользователей по имени пользователя.

Comments

    Ничего не найдено.