Войти с помощью Django REST JWT

У меня есть проект Django с двумя приложениями. Первое приложение - это простое приложение для входа / регистрации, основанное на механизме аутентификации Django по умолчанию. Он имеет две формы, и после успешного входа в систему или регистрации он будет перенаправлен на мое второе приложение. Итак, мое второе приложение - это одностраничное приложение на основе Vue.js.

Также я использовал пакеты djangorestframework и djangorestframework-jwt.

Я понял, как работает JWT, но не могу понять, как реализовать его в моем проекте. Например, это часть кода, который выполняется после POST-запроса из формы входа в мои представления:

...
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, email=username, password=password)
if user is not None:
    login(request, user)
    return redirect('spa')
...

Итак, у меня возникли следующие вопросы:

  1. Что мне делать после успешного входа в систему (перед перенаправлением), чтобы сделать токен и отправить с ответом
  2. djangorestframework-jwt предоставляет представления для включения в URL-адреса

    from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
    

    Итак, где я должен вызвать receive_jwt_token? В SPA после успешного входа в систему?

  3. Должен ли я создать сериализатор для модели пользователя, чтобы использовать JWT?
  4. Правильно ли использовать * rest-jwt без поддержки RESTful?



Ответы (1)


Начиная ваш четвертый вопрос:

Правильно ли использовать * rest-jwt без поддержки RESTful?

Rest JWT - это метод аутентификации для API, поэтому смешивание его с аутентификацией по умолчанию Django является в некоторой степени неправильным использованием, и я думаю, что именно поэтому вы запутались в этой проблеме. Вы должны использовать методы rest-jwt как автономные процедуры аутентификации, а не связанные со встроенными методами аутентификации Django.

Принимая во внимание это, я думаю, что лучший способ - включить функцию входа / регистрации из вашего первого приложения в ваше приложение Vue. Затем методы аутентификации в приложении Vue могут получать доступ к маршрутам API с вашего сервера Django.

Вот краткое описание того, как это может работать:

In myapp/urls.py:

from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
urlpatterns = [
    url('auth/token$', obtain_jwt_token),
    url('auth/token/refresh', refresh_jwt_token,
    url('auth/token/verify', verify_jwt_token)
]

Затем во Vue функция входа в систему может сделать запрос POST на [host]/auth/token с учетными данными пользователя для получения JWT. Для справки DRF JWT docs: https://jpadilla.github.io/django-rest-framework-jwt/#usage

Таким образом, вам не придется беспокоиться о перенаправлении и изменении процессов аутентификации.

person Henry Woody    schedule 26.08.2018