处理Django Rest框架+ vue SPA身份验证

时间:2018-09-16 12:26:29

标签: django vue.js django-rest-framework vuejs2 single-page-application

对于单个页面应用程序(当然,使用Vue Router),我如何获得与django提供的功能相同的功能,django将经过身份验证的用户(用户全局对象检索用户配置文件等的数据)添加到vue中。 >

我的观点是,我不知道如何为vue创建一个与django中间件等效的中间件,以便在用户提供用户名和密码后保持其登录状态。

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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)