Как вернуть пользовательские данные с помощью маркеров доступа и обновления, чтобы идентифицировать пользователей в Django Rest Framework simple JWT? - PullRequest
0 голосов
/ 26 ноября 2018

В Django суперпользователь может добавить больше пользователей в соответствии с их списком.Я использую простой JWT с DRF для аутентификации.Но невозможно определить тип пользователя, только увидев токены доступа и обновления.

Вот мой файл settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',),
    'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_simplejwt.authentication.JWTAuthentication',),


}

urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView


urlpatterns = [

    path('admin/', admin.site.urls),
    path('', include('Manage_Merchants.urls')),

    path('api-auth', include('rest_framework.urls')),
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),


]

, когда я нажимаю 127.0.0.1:8000/api/token/ через Почтальонаон запрашивает имя пользователя и пароль.Когда я ставлю имя пользователя и пароль, он генерирует маркер обновления и доступа. Генерация JWT с DRF с использованием Почтальона

Итак, как я могу определить, что токен генерируется для суперпользователя или другого пользователя, созданного суперпользователем?Как я могу передать больше значения в виде словаря вместе с токенами доступа и обновления для определения типа пользователя?

1 Ответ

0 голосов
/ 28 ноября 2018

Как сказал Кумар, вы должны переопределить TokenObtainPairView.Позвольте мне углубиться в это:

Создайте новый classView в вашем основном приложении views.py, или, если вы хотите иметь более чистый код, вы можете создать новое приложение, например, с именем jwt_token_patched и создать представления.пи файл в нем.Теперь добавьте к нему следующий код:

class TokenObtainPairPatchedView(TokenObtainPairView):
    """
    Takes a set of user credentials and returns an access and refresh JSON web
    token pair to prove the authentication of those credentials.
    """
    serializer_class = serializers.TokenObtainPairPatchedSerializer

    token_obtain_pair = TokenObtainPairView.as_view()

Теперь для сериализатора добавьте следующее:

class TokenObtainPairPatchedSerializer(TokenObtainPairSerializer):
     def to_representation(self, instance):
         r = super(TokenObtainPairPatchedSerializer, self).to_representation(instance)
         r.update({'user': self.user.username})
         return r

Метод to_representation () вызывается, когда сериализатор возвращает данные в формате json, так что вы можете добавитьвсе, что вы хотите там.помните, я просто добавил имя пользователя в значение поля пользователя, вы можете добавить любое значение элемента пользователя, которое вы хотите в нем.

Также создайте URL для этого и теперь используйте этот метод для получения токена.Не стесняйтесь задавать любые вопросы, если хотите.надеюсь, что это было полезно :)

...