Django 自定义登录视图 -> 会话不持久
Posted
技术标签:
【中文标题】Django 自定义登录视图 -> 会话不持久【英文标题】:Django custom login view -> Session not persistent 【发布时间】:2017-02-28 21:59:57 【问题描述】:环境: Django 1.9.6 Python 3.5
我已经为用户和权限管理制作了一个自定义用户模型。
现在,我的登录视图出现问题,我不明白。
def login_user(request):
if request.POST:
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
# User Object is fine...
if user.is_active:
login(request, user)
# Login passes -> request.user is OK and request.session _session_cache is filled corretly..
if 'next' in request.POST.keys():
redirect_to_next = request.POST['next']
else:
redirect_to_next = settings.LOGIN_REDIRECT_URL
return HttpResponseRedirect('/auth/main/')
redirect_to_next = request.GET.get('next','/')
return render(request, 'authentication/login.html', 'form': LoginForm, 'next' : redirect_to_next )
在我被重定向到另一个页面后,会话被删除...并且 request.user = AnonymousUser。
这是我调用 login() 方法后会话变量的输出...
print(request.session.__dict__)
'modified': True, '_SessionBase__session_key': 'bn8qxxxxx', 'serializer': <class 'django.core.signing.JSONSerializer'>, 'model': <class 'django.contrib.sessions.models.Session'>, 'accessed': True, '_session_cache': '_auth_user_hash': 'f5fxxxxxx', '_auth_user_id': '3f5b3fd1-XXXXXX', '_auth_user_backend': 'django.contrib.auth.backends.ModelBackend'
然后我被重定向到另一个页面...
print(request.session.__dict__)
'modified': False, '_SessionBase__session_key': None, 'serializer': <class 'django.core.signing.JSONSerializer'>, 'accessed': False
有人可以帮助我吗? 谢谢 BR
【问题讨论】:
你有没有想过这个问题?我有完全相同的问题... 我有一个类似的问题需要***.com/questions/65678309/…上的相同解决方案 请将响应选项卡的屏幕截图粘贴到浏览器上。想检查主机域和 HTTP 状态码 【参考方案1】:在 settings.py 中将 SESSION_COOKIE_SECURE 设置为 False
以下堆栈溢出链接可能会对您有所帮助, Session data lost after a HttpResponseRedirect
【讨论】:
【参考方案2】:在 settings.py 中将 SESSION_COOKIE_SECURE 设置为 False 可能会解决本地开发中的问题,但与 https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-SESSION_COOKIE_SECURE 一样。这将是一个主要的安全问题,因为攻击者可以使用数据包嗅探器捕获未加密的会话 cookie,并使用 cookie 劫持用户的会话。如果我们更新函数 login(request, user) 来处理这种情况会更好。
【讨论】:
以上是关于Django 自定义登录视图 -> 会话不持久的主要内容,如果未能解决你的问题,请参考以下文章