Python Django Rest框架中的持久登录

Python Django Rest框架中的持久登录,python,django,rest,Python,Django,Rest,我使用的是Django Rest框架,我使用Rest\u auth的端点设置了一个登录端点。但是,登录后,如果刷新页面,登录将无效 我通过设置一个“/loginCheck”端点来测试这一点,我在登录后检查该端点,如下所示: @api_view(['GET',]) @permission_classes([AllowAny,]) def get_user(request): user = request.user print(user) 登录后,如果我停留在页面上并执行/logi

我使用的是Django Rest框架,我使用
Rest\u auth
的端点设置了一个登录端点。但是,登录后,如果刷新页面,登录将无效

我通过设置一个“/loginCheck”端点来测试这一点,我在登录后检查该端点,如下所示:

@api_view(['GET',])
@permission_classes([AllowAny,])
def get_user(request):
    user = request.user
    print(user)
登录后,如果我停留在页面上并执行
/loginCheck',
打印命令将显示活动用户的用户名。但是,在刷新页面时,如果我执行相同的功能,它将打印
AnonymousUser
。我使用了以下身份验证类

REST_FRAMEWORK = {
   'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework.authentication.SessionAuthentication',
   ),
)
我正在使用
TokenAuthentication
,因为我的SPA中还有一个成功持久化的Facebook登录端点。在持续的非Facebook登录方面,我缺少什么

编辑:

我的设置中间件

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

如果您使用令牌登录,它将仅对该单个请求响应周期有效。从设计上讲,它并不像常规的Django浏览器会话那样持久。因此,对于任何后续请求,您需要自己附加令牌的值。从cookie中检索它或根据您的客户端应用程序通过其他方式存储它

下面是一些示例代码:

var request = new XMLHttpRequest()
request.setRequestHeader("Authorization", "Token " + token);
request.open("GET", "foo/bar", true);

我看到你说你正在使用令牌身份验证系统,但是我在默认身份验证类和权限类中看不到它

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
}
我认为IsAuthenticated已经足够了,但是您还应该检查其他权限

我已安装的应用程序还包含已安装的authtoken(我不确定这是否必要,因为我不久前编写了它)


希望这些帮助。

您的设置中同时包含SessionMiddleware和AuthenticationMiddleware吗?@user640916,我已将我的中间件类添加到帖子中
INSTALLED_APPS = {
    ...
    'rest_framework',
    'rest_framework.authtoken',
    ...
}