0

認証されたユーザーが5秒間非アクティブであるかどうかを検出するミドルウェアを実装しようとしていることに関連する問題があります。私はこの仕事をするためにPythonモジュールを以下に書きましたが、うまく機能していないようです。私は2つの理由を見つけました; それらの1つは; ユーザーをホームページに正しくリダイレ​​クトできません; ミドルウェアがセッションキーを正しく変更していない

私はこの問題をどのように解決できるかを知りませんでした。以下に、私が行ったことを2つのパートとして示します。

最初の部分; ミドルウェア.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に変更しました

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

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):
    .........

認証されていない場合、ユーザーはそのページに移動できません。

于 2013-02-11T08:34:19.610 に答える