在 React SPA 中使用 Django 身份验证系统

mat*_*net 4 authentication django django-views reactjs

我目前正在开发基于 React 和 Django 的应用程序。

我正在使用 Django rest Framework 创建在 React 前端使用的 REST API。这很好用。

我现在愿意使用 Django 会话身份验证系统为应用程序实现身份验证。我可以创建身份验证 API。但是,我更喜欢使用Django 身份验证系统

如何在 React SPA 中使用 Django 身份验证视图和表单?

描述整体架构的代码片段将不胜感激。我不知道如何让 React 应用程序“调用 Django 代码”(除了 DRF API)!

我的问题是关于身份验证,但我可以为其他 Django 视图重用相同的机制。

rap*_*erx 5

总之

一旦您的用户登录,他们的所有请求都将与他们的 Django 用户相关联,可在request.user. 因此,您无需在登录后通过 React 与 Django 的身份验证视图进行交互。

详细

假设你有:

  1. 'django.contrib.auth'并且'django.contrib.contenttypes'在你的INSTALLED_APPS
  2. SessionMiddleware并且AuthenticationMiddleware在你的MIDDLEWARE设置
  3. 主 urls.py 文件中的 auth url:
path('accounts/', include('django.contrib.auth.urls')
Run Code Online (Sandbox Code Playgroud)

然后您的用户可以使用 处的视图登录/accounts/login/。之后,他们将获得一个sessioncookie,该cookie 随向您的 Django 服务器发出的每个请求一起发送。Django 使用此 cookie 来识别发出请求的用户。Django 在request.user.

您可以使用此对象检查 DRF 视图中的权限:

if request.user.is_staff:
    # Do something for staff users.
else:
    # ...
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 一旦用户通过身份验证,您将需要检查单个用户是否有权访问他们请求的数据 - 但权限是一个不同的主题。DRF 有关于权限的文档

  2. 对于非 GET 请求,您应该在请求中包含 CSRF 令牌。您可以使用 Django{% csrf_token %}标签来获取令牌,或者从 cookie 中获取它:var csrftoken = Cookies.get('csrftoken');