我目前正在开发基于React和Django的应用程序。
我正在使用Django rest框架创建在React前端中使用的REST API。效果很好。
我现在愿意使用Django会话身份验证系统为应用程序实施身份验证。我可以创建身份验证API。但是我更喜欢使用Django authentication system。
如何在React SPA中使用Django身份验证视图和表单?
一个描述整体架构的代码片段将不胜感激。我不知道如何让React应用程序“调用Django代码”(除了DRF API)!
我的问题是关于身份验证,但是我可以将相同的机制用于其他Django视图。
答案 0 :(得分:2)
一旦您的用户登录,他们的所有请求都将与他们的Django用户相关联,可以在request.user
中进行访问。这样,您无需在登录后通过React与Django的身份验证视图进行交互。
假设您拥有:
'django.contrib.auth'
中的'django.contrib.contenttypes'
和INSTALLED_APPS
SessionMiddleware
和AuthenticationMiddleware
在您的MIDDLEWARE
设置中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:
# ...
对用户进行身份验证后,您将需要检查单个用户是否有权访问他们请求的数据-但是权限是另一个主题。 DRF具有documentation about permissions。
对于非GET请求,您应在请求中包含CSRF令牌。您可以使用Django {% csrf_token %}
标签获取令牌,也可以从cookie中获取令牌:var csrftoken = Cookies.get('csrftoken');