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

时间:2020-04-01 14:54:16

标签: django reactjs authentication django-views

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

我正在使用Django rest框架创建在React前端中使用的REST API。效果很好。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

总结

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

详细

假设您拥有:

    您的'django.contrib.auth'中的
  1. 'django.contrib.contenttypes'INSTALLED_APPS
  2. SessionMiddlewareAuthenticationMiddleware在您的MIDDLEWARE设置中
  3. 主urls.py文件中的身份验证URL:
path('accounts/', include('django.contrib.auth.urls')

然后,您的用户可以使用/accounts/login/上的视图登录。之后,他们将获得一个session Cookie,该Cookie随对您Django服务器的每个请求一起发送。 Django使用此Cookie来识别哪个用户发出了请求。 Django在request.user中为您提供了该信息。

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

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

注释

  1. 对用户进行身份验证后,您将需要检查单个用户是否有权访问他们请求的数据-但是权限是另一个主题。 DRF具有documentation about permissions

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