在django中的特定时间后自动注销用户

Shi*_*dla 3 django django-middleware django-sessions

我需要在特定时间后注销用户(现在将其设为 1 分钟),因此创建了一个中间件类,如下所示

我的项目/中间件.py

from datetime import datetime, timedelta
from django.contrib import auth


class AutoLogout:
  def process_request(self, request):
    if not request.user.is_authenticated() :
      #Can't log out if not logged in
      return

    try:
      if datetime.now() - request.session['last_touch'] > timedelta( 0, settings.AUTO_LOGOUT_DELAY * 60, 0):
        auth.logout(request)
        del request.session['last_touch']
        return
    except KeyError:
      pass

    request.session['last_touch'] = datetime.now()
Run Code Online (Sandbox Code Playgroud)

设置.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'myproject.middleware.HttpErrorHandler',
    'myproject.middleware.AutoLogout'
)
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
AUTO_LOGOUT_DELAY = 1
Run Code Online (Sandbox Code Playgroud)

Djagno 版本是 1.4.12

但是上面的代码不起作用,我不确定我哪里做错了,所以有人可以让我知道为什么上面的代码不起作用以及如何每 1 分钟或 5 分钟注销用户吗?

Njo*_*bau 9

从 Django 1.7开始引入会话管理。在设置下,您可以添加两个参数来帮助您允许自动注销,而不必编写您自己的中间件。

  1. SESSION_EXPIRE_AT_BROWSER_CLOSE
  2. SESSION_COOKIE_AGE

希望能解答您的疑问。快乐编码!!