python - 在 Django Rest Framework 中保持登录

标签 python django rest

我正在使用 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/

相关文章:

Python Celery init.d 脚本 OSError : [Errno 1] Operation not permitted

python - 无法使用 Django 身份验证

python - "try: input() except KeyboardInterrupt:"有解决方法吗

python - Django 表单向导重定向

python - 您可能需要将 u'127.0.0.1' 添加到 ALLOWED_HOSTS

android - ReST API 安全性

python - pandas 数据框中的新列基于带有条件列表的现有列值

python - 从 C++ 将带有空格的 argv 解析为 Python 脚本

jquery - 使用 Jersey 发出 REST 问题,同时使用 Jquery 提交 JSON 数组以进行 POST,

c# - WCF Restful 服务 GET/POST