2016-05-18 44 views
1

私は、ログインする機能を制限し、指定された時間帯に認証される必要があるアプリケーションに取り組んでいます。午前8時から午後5時までログインの機能を制限するために、カスタムの認証バックエンドを作成しました。ここでは、authenticate()メソッドは、現在の時刻が許可された時間内にある場合にのみユーザーオブジェクトを返します。Django:ユーザーのセッションを時間制限する

ここで、指定した時間が経過すると、ユーザーの認証セッションを終了します。

セッションexpiry_date日付を設定し、クッキーのExpiryは、これを達成するための最良の方法のようですが、いくつかの時間のためのソースコードでDjangoのドキュメントを読んで掘り後、私はそれに良い解決策を見つけていませんでした。これはどうすればいいですか?どんな助けもありがとうございます。

答えて

2

authバックエンドの変更は、アプリケーションのセキュリティ上重要な部分を変更しているため、探している解決策ではありません(少なくとも私はお勧めしません)。

custom middleware:登録ユーザーが午前8時から午後5時までにサイトにアクセスしようとすると、このサイトを使用できないという警告が表示されます。

from django.utils import timezone 
from django.core.exceptions import PermissionDenied 

class AccessRestrictionMiddleware: 
    def process_request(self, request): 
     current_hour = timezone.now().hour 
     is_time_restricted = current_hour >= 8 and current_hour < 17 
     if request.user.is_authenticated() and is_time_restricted: 
      raise PermissionDenied 
+0

私は完全に変更していません。デフォルトのバックエンドを拡張し、 'authenticate()'メソッドで 'super()'を最初に呼び出してから、認証されたユーザユーザーを返し、正常に認証されたことを意味します)。デフォルトのバックエンドは100%動作しています。 –

+0

指定された時間外にウェブサイトを使用してログインしたユーザーの場合は、まだログアウト/警告を表示する必要があります。ただし、AuthBackendは、ユーザーが有効なセッションでリクエストしていても、関数デコレータまたはミドルウェアで確認する必要がある場合は使用されません。 – blacklwhite

関連する問題