0

我有一些与我正在尝试实现一个中间件相关的问题,该中间件检测经过身份验证的用户是否在 5 秒内处于非活动状态。我已经在 Python 模块下面写了来完成这项工作,但它似乎效果不佳。我找到了两个原因;其中之一是;我无法将用户正确重定向到主页;中间件未正确更改会话密钥

我还没有发现如何解决这个问题。我将分两部分展示我对下面所做的事情。

第一部分 ; 中间件.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()

第二部分 ; 设置.py

SESSION_COOKIE = 5 

MIDDLEWARE_CLASSES = (
    'home.middleware.TimeOut',
)

编辑:我错误地写了其他课程。我已将名称更改为 TimeOut

4

1 回答 1

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()

装饰器.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):
    .........

如果未通过身份验证,用户将不允许访问该页面。

于 2013-02-11T08:34:19.610 回答