我正在使用 Django Rest Framework,并使用 rest_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',
)
最佳答案
如果您使用 token 登录,则该 token 仅在该单个请求-响应周期内有效。从设计上来说,它并不像常规 Django 浏览器 session 那样持久。因此,对于任何后续请求,您需要自己附加 token 的值。从 cookie 中检索它或根据您的客户端应用程序通过其他方式存储它。
这里是一些示例代码:
var request = new XMLHttpRequest()
request.setRequestHeader("Authorization", "Token " + token);
request.open("GET", "foo/bar", true);
关于python - 在 Django Rest Framework 中保持登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29081798/