Задача: подружить фреймворк Django и модуль авторизации Nuxt: nuxt/auth. При этом очень важно "на затыкать" и не отключать алгоритм CSRF защиты Django.
Рассмотрим необходимую нам последовательность запросов:
- Отправить запрос для получения CSRF токена
- Сервер в результате вернёт куку (cookie) с токеном
- С использованием этого токена отправить авторизационные данные (логин/пароль)
- Получить в ответ куку с токеном сессии.
- Использовать её для всех дальнейших запросов
Некоторая сложность тут заключается в том, что Django ожидает CSRF токен с заголовком X-CSRFToken, а nuxt/auth ожидает куку с хедером XSRF-TOKEN.
Конфигурация Django
Для начала сообщим фреймфорку:
- В каком виде отдавать CSRF токен
- От каких адресов могут прилетать запросы
- Разрешим принимать заголовок x-xsrf-token (его нам будет отдавать nuxt/auth)
Методы для авторизации
Добавим необходимые для авторизации/логаута/получения данных о пользователе вьюшки.
Установка CSRF токена:
Последний шаг — настройка URL схемы:
Далее переходим к настройке нашего Nuxt приложения.
Настройка nuxt/auth
Для начала сконфигурируем модуль nuxt/auth... (nuxt.config.js
)
Мы сообщили модулю nuxt/auth как получить CSRF токен, как проводить авторизацию и выход из системы. Теперь нужно добавить настройку библиотеки axios (наиболее часто используемая в рамках Nuxt библиотека для сетевых запросов), чтобы при каждом запросе к серверу прикладывались авторизационные данные:
Собственно, на этом конфигурация Django и nuxt/auth закончена. Теперь Django знает как отдавать CSRF токен, а nuxt/auth знает как проводить процедуру авторизации. Последний шаг — пример как использовать модуль nuxt/auth:
На этом у меня всё. Если хотите автоматических редиректов при логине/логауте, нужно заполнить поле redirect в конфигурации модуля auth в файле nuxt.config.js
.
Теперь точно всё, всем успехов!