我目前正在开发一个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不要这样做,并且如果其他用户登录,只需将新用户重定向到其主页?