新用户登录后,重定向到上一个用户的最后一页

时间:2013-12-12 17:28:40

标签: python django session redirect

我目前正在开发一个Django网站,我正在使用django.contrib.auth和django-security-session自动关闭用户会话。

如果用户在会话期满后离开其会话并且新用户到达同一导航器,则如果新用户尝试使用该会话,则会话将自动关闭。但是,如果此新用户再次登录,则会将其重定向到上一个用户所在的最后一页。

我看了一下django-security-session中的代码,我在middleware.py“process_request”中找到了以下内容:

from django.contrib.auth import logout
...
def process_request(self, request):
    ...
    delta = now - get_last_activity(request.session)
    if delta.seconds >= EXPIRE_AFTER:
        logout(request)
    ...

所以似乎django-security-session依赖于django.contrib.auth来关闭会话。此注销会刷新当前会话并从请求中删除用户ID。但是,在以下登录后,仍然保留刚刚注销的用户的当前页面以进行重定向。在我的例子中,这个登录是由装饰者@login_required执行的,它依赖于方法“django.contrib.auth.views.redirect_to_login”:

def redirect_to_login(next, login_url=None, \
                        redirect_field_name=REDIRECT_FIELD_NAME):
    ...
    resolved_url = resolve_url(login_url or settings.LOGIN_URL)
    login_url_parts = list(urlparse(resolved_url))
    if redirect_field_name:

        querystring = QueryDict(login_url_parts[4], mutable=True)
        querystring[redirect_field_name] = next
        login_url_parts[4] = querystring.urlencode(safe='/')

    return HttpResponseRedirect(urlunparse(login_url_parts))

...使用已经注销的最后一个用户的url生成重定向页面,该URL可能与现在登录的用户不同。

在开始围绕代码疯狂之前,有什么我想念的吗?无论如何,我可以指示django.contrib.auth不要这样做,并且如果其他用户登录,只需将新用户重定向到其主页?

0 个答案:

没有答案