2016-12-16 2 views
0

私はDjangoの組み込み認証システムを使ってログイン/ログアウトできるDjangoアプリケーションを持っています。私はログインしているユーザのために異なるセッションを維持するためにバックエンドでセッションコンセプトを使用していません。Djangoの1つのブラウザでログアウトすると、すべてのブラウザでログアウトするには?

私のカスタムモデルでは、ログイン/ログアウト状態を保存するために単一のフィールドを使用しています。

ここで、2つの異なるブラウザからのいずれかのユーザーログインがtrueの場合、login_stateはtrueになります。ユーザーのログアウトが1つのブラウザから行われた場合、login_stateはFalseに設定されます。

他のブラウザから自動的にログアウトさせるには、Django-wayとは何ですか?他のすべてのブラウザのログインページに自動的にリダイレクトされますか?

PS:他のブラウザでページを更新しても、ログインページにリダイレクトされません。ビューでlogin_requiredデコレータを使用しているので、フローをログインページにリダイレクトすることができます。私は、ユーザが認証されていない場合、ログインページにリダイレクトするためにsettings.pyでLOGIN_URLを使用しています。

+0

確かにこれはあなたがに行く次のページから、ユーザーは、私はDjangoの認証アプリケーションは、ユーザーがログアウトされた場合にログインページにリダイレクトするために、同じlogin_requiredメソッドの定義を使用して推測間違ったログイン状態 – Sayse

答えて

0

私はlogin_requiredデコレータを無効にしてlogin_stateを確認することをお勧めします。 login_stateが真の場合、通常は他のユーザーのセッションをログアウトし、ログインページにリダイレクトします。

以下のコードに従ってください。私はlogin_requiredの動作をカスタマイズするために私のプロジェクトを使用しました。

def custom_user_passes_test(test_func, login_url=None, 
          redirect_field_name=REDIRECT_FIELD_NAME): 
    """ 
    Decorator for views that checks that the user passes the given test, 
    redirecting to the log-in page if necessary. The test should be a callable 
    that takes the user object and returns True if the user passes. 
    """ 

    def decorator(view_func): 
     @wraps(view_func, assigned=available_attrs(view_func)) 
     def _wrapped_view(request, *args, **kwargs): 
      if test_func(request.user): 
       #get current login_state and store in variable named login_state 
       if login_state: 
        return view_func(request, *args, **kwargs) 
       else: 
        return redirect_to_login(path, resolved_login_url, 
            redirect_field_name) 
     return _wrapped_view 
    return decorator 

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, 
        login_url=None): 
    """ 
    Decorator for views that checks that the user is logged in, redirecting 
    to the log-in page if necessary. 
    """ 
    actual_decorator = custom_user_passes_test(lambda u: u.is_authenticated(), 
               login_url=login_url, 
               redirect_field_name=\ 
               redirect_field_name) 
    if function: 
     return actual_decorator(function) 
    return actual_decorator 
+0

を持って、自分自身を解決します。なぜ、あなたはlogin_reqiuredの独自の定義を定義しましたか? –

+0

私はセッション中にユーザがログインしている間に情報を保存しました。これはアプリケーションを正しく実行するために必要です。だから、セッションデータが調整されているかどうかを確認した後、再度ログインするようにユーザーをリダイレクトしています。 – Darshit

+0

あなたの場合、login_stateをチェックすることができます。 – Darshit

関連する問題