2

ドキュメントから、独自の django 認証バックエンドを作成する方法がわかります。セッションとユーザーの詳細が 3 つのテーブル (auth_user、Session、および他の認証トークンを格納するときのカスタム テーブル) に分割されていることを考慮すると、少し混乱する可能性があります。

ビュー内のセッションでセッションタイムアウトを設定できることは知っています。ただし、カスタム認証バックエンド内で新しいセッションを作成すると同時に、django セッションのタイムアウトを設定する別の方法 (または最善の方法) があるかどうかは疑問です。

基本的に、私の他の認証システムの合計タイムアウトは 24 時間で、アイドル時間は 1 時間であるため、これらのタイムアウトをできるだけ Django セッションに近づけたいと考えています。

これが理にかなっていることを願っています。

ありがとう

4

1 に答える 1

1

設定時:

SESSION_EXPIRE_AT_BROWSER_CLOSE = False

このミドルウェアは、最大 24 時間 + 1 時間のアイドル時間をチェックします。

class timeOutMiddleware(object):

    def process_request(self, request):
        shouldLogout = False
        if request.user.is_authenticated():
            if 'beginSession' in request.session:            
                elapsedTime = datetime.datetime.now() - \
                              request.session['beginSession']
                if elapsedTime.seconds > 24*3600:
                    del request.session['beginSession'] 
                    shouldLogout = True
            else:
                request.session['beginSession'] = datetime.datetime.now()

            if 'lastRequest' in request.session:            
                elapsedTime = datetime.datetime.now() - \
                              request.session['lastRequest']
                if elapsedTime.seconds > 60*60:
                    del request.session['lastRequest'] 
                    shouldLogout = True

            request.session['lastRequest'] = datetime.datetime.now()

            if shouldLogout:
                logout(request)

        else:
            if 'beginSession' in request.session:
                del request.session['beginSession']
            if 'lastRequest' in request.session:
                del request.session['lastRequest']

        return None

注意: テストしていません。アプリ用に同様のミドルウェアを作成し、要件に合わせて変更しました。

于 2013-06-16T13:46:35.817 に答える