2016-06-22 17 views
2

Djangoアプリケーションでは、私は今作業中です。別のデバイスで同じユーザーログイン後にユーザーセッションが複数とマークされているため、最初のユーザーがログアウトした後にログアウトし、admin/loginページにリダイレクトされます。パラメータ付きDjangoログインページ

admin/loginページの最初のユーザーの警告を表示する必要があります。唯一のことは、今のところ私の頭に浮かんだのは、GETパラメータをこのページのURLに追加して表示し、この警告を表示することです。しかし、セッションが期限切れになっているかどうかをチェックして、GETというパラメータ(たとえば、multiple_sessions=1 url)を追加するクラス/メソッドを見つけることができません。そこで質問が正確に方法がlogoutにユーザーをリダイレクトするための責任があるもの、である

def logout(self, request, *args, **kwargs): 
    if request.session['multiple']: 
     super(CustomLogout, self).logout(request, redirect_to='/admin/login?multiple_session=1', *args, **kwargs) 
    else: 
     super(CustomLogout, self).logout(request, *args, **kwargs) 

私は仮定し、それは次のようになりますか?

この動作を達成する他のアイデアは大変ありがたいです!

+1

あなたは 'SessionMiddleware'を意味しますか? – Sayse

+0

私はカスタムミドルウェアを使用しました – asyndrige

答えて

0

class LogoutMiddleware(object): 
    def process_response(self, request, response): 
     if hasattr(request, 'user'): 
      if request.user.is_authenticated() and request.session.exists(request.session.session_key): 
       current_session = Session.objects.get(pk=request.session.session_key) 
       if current_session.old == True: 
        response_redirect = HttpResponseRedirect(reverse('logout')) 
        response_redirect.set_cookie('multiple-sessions', True) 
        return response_redirect 
     return response 

次にログインビューがこのクッキーを見つけた場合、それはテンプレートに警告をレンダリングします。

1

私が正しく理解しているかわかりません。あなたの質問は、ログアウトした後にユーザーにメッセージを表示する方法です、それは間違いありませんか?

Djangoには、メッセージを表示するためのmessages frameworkがあります。必要な動作を実現するために、このカスタムミドルウェアクラスを使用し

from django.contrib import messages 

def logout(self, request, *args, **kwargs): 
    if request.session['multiple']: 
     messages.info(request, 'Something multiple sessions.') 
    super(CustomLogout, self).logout(request, *args, **kwargs) 
+0

正確ではなく、私が尋ねてきたものですが、有用です、ありがとう! – asyndrige

関連する問題