我遇到了一些问题,我正在尝试实现一个中间件,该中间件检测经过身份验证的用户是否处于非活动状态5秒钟。我已经写了下面的Python模块来完成这项工作,但似乎它不能很好地工作。我发现了两个原因; 其中之一是;我无法正确地将用户重定向到主页 ;中间件不是正确更改会话密钥
我还没有发现我怎么能解决这个问题。我将把我对以下所做的工作展示为两部分。
第一部分; middleware.py
class TimeOut:
@csrf_exempt
def process_request(self, request):
try :
if request.session['isA'] == False:
return #redirect(reverse("homePage_view"))
except KeyError:
request.session['isA'] = False
return
try :
passT = datetime.now() - request.session['Time']
if passT > timedelta( 0, settings.SESSION_COOKIE, 0):
request.session['isA'] = False
del request.session['Time']
return
except KeyError:
pass
request.session['Time'] = datetime.now()
第二部分; settings.py
SESSION_COOKIE = 5
MIDDLEWARE_CLASSES = (
'home.middleware.TimeOut',
)
编辑:我错误地写了其他课程。我已将名称更改为TimeOut
答案 0 :(得分:1)
这是你正在谈论的那个:
class AutoLogout:
def process_request(self, request):
if not request.user.is_authenticated() :
return HttpResponseRedirect(reverse('app_name:url_name'))
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 HttpResponseRedirect(reverse('app_name:url_name'))
except KeyError:
pass
request.session['last_touch'] = datetime.now()
<强> decorators.py 强>
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def login_check(view_func):
def _wrapped_view_func(request, *args, **kwargs):
if not request.user.is_authenticated:
//return to home page url
return HttpResponseRedirect(reverse('app_name:url_name'))
return view_func(request, *args, **kwargs)
return _wrapped_view_func
创建decorators.py后,更新您的视图:
from app_name.decorators import login_check
@login_check
def view_name(request):
.........
如果未经过身份验证,则不允许用户访问该页面。