Django TokenAuthentication — расширение JWTget_jwt_token

У меня есть приложение Django REST и аутентификация токена на базе Django REST framework JWT Auth

Позвольте мне сформулировать мою высокоуровневую цель:

Моя цель - сгенерировать токен для пользователя, если он предоставит правильные учетные данные, И ЗАТЕМ сразу после успешного входа в систему я хочу выполнить дополнительный набор операций. Для простоты предположим, что я хочу напечатать «Hello» на консоли.

Прямо сейчас мой код выглядит так:

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    url(r'^api-token-auth/', obtain_jwt_token),
]

Я хочу сделать следующее

  1. Получите токен, который генерирует obtain_jwt_token
  2. Если аутентификация прошла успешно, выполните некоторые дополнительные операции и верните токен пользователю.

Я чувствую себя потерянным в джунглях всей этой архитектуры Django, связанной с классами аутентификации. Правильно ли я понимаю, что если я использую сторонние пакеты, такие как Django JWT, у меня не будет возможности войти в систему и нет возможности выполнять дополнительные операции после входа пользователя? И если я хочу иметь больше возможностей в процессе входа в систему, мне придется выполнять всю работу, которую разработчики Django JWT сделали с нуля? Могу ли я как-то добавить некоторые операции ON TOP obtain_jwt_token Django JWT?


person Edgar Navasardyan    schedule 21.02.2017    source источник


Ответы (1)


obtain_jwt_token — это просто ссылка на представление, и, как и в случае с любым представлением, вы можете просто подклассировать его и вместо этого ссылаться на него

class MySpecialJWT(ObtainJSONWebToken):
    def post(self, request, *args, **kwargs):
        response = super().post(request, *args, **kwargs)
        # foo bar
        return response
person Sayse    schedule 21.02.2017
comment
@EdgarNavasardyan — их JSONWebTokenAPIView по-прежнему использует post, поэтому просто вызовите super, чтобы позволить им делать свое дело, а затем расширьте их по мере необходимости. - person Sayse; 21.02.2017
comment
Вы сделали мой день - person Edgar Navasardyan; 22.02.2017