处理 django rest framework + vue SPA auth

Posted

技术标签:

【中文标题】处理 django rest framework + vue SPA auth【英文标题】:Handling django rest framework + vue SPA auth 【发布时间】:2019-02-20 13:46:39 【问题描述】:

对于单页应用程序(当然是使用 Vue 路由器),我如何才能获得与 django 为经过身份验证的用户(用于检索用户配置文件等数据的用户全局对象)提供的相同功能。

我的意思是,我不知道如何为 vue 创建一个中间件,相当于 django 中间件,以便在用户提供用户名和密码后保持用户登录。

我知道我可以使用 django rest framework jwt 来实现一个端点/api-token-auth/ 来获取所需的令牌(将其存储到 localStorge,这样我就可以将它放入 axios 标头中)以便能够从 api 检索信息,但是除了令牌之外我没有任何用户会话,当然,我没有关于传递给模板的用户的任何信息。

如何将用户全局对象传递给每个模板?有没有简单的方法可以做到这一点?

提前致谢。

【问题讨论】:

如果存在适当的设置,Django 在每个模板中提供“用户”上下文对象。 ***.com/questions/13713077/… 。如果我理解你,请解释更多 @adnanmuttaleb 我不打算使用 django 模板。我有与 django 分开的 Vue 应用程序。 【参考方案1】:

会话身份验证可以通过将SessionAuthentication 类添加到settings.py 来使用Django REST 框架实现,如下所示。

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
    ),
   'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )

这将使用Django's 默认会话后端进行身份验证。关键是,您需要确保为任何“不安全”的 HTTP 方法调用(PUT、PATCH、POST、DELETE)包含有效的 CSRF 令牌。

为了访问当前用户,你可以创建API端点/users/current

class CurrentUserView(APIView):
    def get(self, request):
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

【讨论】:

以上是关于处理 django rest framework + vue SPA auth的主要内容,如果未能解决你的问题,请参考以下文章

在 Django REST Framework 中处理嵌套对象表示

如何在 Django Rest Framework 中处理并行请求?

处理 django rest framework + vue SPA auth

处理django rest framework + vue SPA auth

Django Rest Framework,模型序列化器,处理只读数据

django-rest-framework框架总结之认证权限限流过滤分页及异常处理