Python Django Rest框架中的持久登录
我使用的是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
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',
...
}