Использование системы аутентификации Django в React SPA - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я занимаюсь разработкой приложения на основе React и Django.

Я использую Django rest Framework для создания API-интерфейсов REST, которые используются в интерфейсе React. Это работает очень хорошо.

Теперь я хочу реализовать аутентификацию, используя Django систему аутентификации сеанса для приложения. Я мог бы создать API аутентификации. Однако я бы предпочел использовать Django систему аутентификации .

Как я могу использовать Django представления и формы аутентификации в React SPA?

Фрагмент кода, описывающий общую архитектуру, будет высоко ценится. Я не могу понять, как заставить приложение React "вызывать Django код" (кроме API-интерфейсов DRF)!

Мой вопрос касается аутентификации, но я мог бы использовать этот же механизм для других Django просмотры.

1 Ответ

0 голосов
/ 02 апреля 2020

В итоге

Как только ваши пользователи войдут в систему, все их запросы будут связаны с их Django пользователем, доступным в request.user. Таким образом, вам не нужно взаимодействовать с представлениями аутентификации Django через React после входа в систему.

Подробно

При условии, что у вас есть:

  1. 'django.contrib.auth' и 'django.contrib.contenttypes' в ваших INSTALLED_APPS
  2. SessionMiddleware и AuthenticationMiddleware в ваших MIDDLEWARE настройках
  3. URL-адреса авторизации в вашем основном файле urls.py:
path('accounts/', include('django.contrib.auth.urls')

Тогда ваши пользователи могут войти в систему, используя представление на /accounts/login/. После этого они получат session cook ie, который отправляется с каждым запросом на ваш Django сервер. Этот повар ie используется Django, чтобы определить, какой пользователь сделал запрос. Django предоставляет эту информацию вам в request.user.

. Этот объект можно использовать для проверки прав в ваших представлениях DRF:

if request.user.is_staff:
    # Do something for staff users.
else:
    # ...

Примечания

  1. Как только пользователи проходят аутентификацию, вы захотите проверить, есть ли у отдельного пользователя разрешение на доступ к запрашиваемым им данным, но это другое разрешение. c. DRF имеет документацию о разрешениях .

  2. Для запросов без GET вы должны включить токен CSRF в свой запрос. Вы можете использовать тег Django {% csrf_token %} для получения токена или получить его из файлов cookie: var csrftoken = Cookies.get('csrftoken');

...