Django自定义登录视图 - >会话不持久

时间:2016-10-19 10:12:39

标签: django session authentication login

环境: 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

2 个答案:

答案 0 :(得分:0)

在 settings.py 中将 SESSION_COOKIE_SECURE 设置为 False

以下堆栈溢出链接可能对您有所帮助, Session data lost after a HttpResponseRedirect

答案 1 :(得分:0)

在 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) 来处理这种情况会更好。