2017-01-12 23 views
1

私はログインしていないユーザーだけにログインビューを開きたいと思っています。ユーザがログインすると、手動で/ login/urlを打つことによってログインビューにアクセスすることはできません。事前にユーザーがログインした後にログインビューを制限する方法は?

感謝:)

+1

'request.user.is_authenticated'を確認してください。 –

+0

@PauloScardine私はいくつかのデコレータによって「ビュー」機能を制限することについて話しています。 –

+0

ログインしたユーザーをログインURLへのアクセスを制限するのではなくホームページにリダイレクトする理由は何ですか? –

答えて

1

あなたは@user_passes_testを使用することができます。

from django.contrib.auth.decorators import user_passes_test 

def user_is_not_logged_in(user): 
    return not user.is_authenticated() 

@user_passes_test(user_is_not_logged_in) 
def my_view(request): 
    ... 

あなたは別のURLにリダイレクトし、サーバのエラーを回避するために@user_passes_test(user_is_not_logged_in, login_url='/')を使用することができます。

+0

これは動作しています。ユーザーがログイン後に手動で/ login/urlを押すと、サーバーは応答しません。これを修正する方法を提案してください。 –

+0

@wimこのメソッドは正しく動作しています。 –

+2

'@user_passes_test(user_is_not_logged_in、login_url = '/')'これを使用して別のURLにリダイレクトし、サーバの問題を取得することはできません。 –

0

このanon_requiredデコレータ(未テスト)のような何か試してみてください:あなたは、おそらく彼は、ログインしたい、自分のプロファイルに(またはログアウトURLにユーザーをリダイレクトするように、代わりにHTTP 400を返すので何かを行うことができます

def anon_required(view_func): 
    """ 
    Decorator for views that checks that the user is NOT logged in. 
    """ 
    def decorated(request, *args, **kwargs): 
     if request.user.is_authenticated(): 
      raise HttpResponseBadRequest("Get out, you are authenticated.") 
     return view_func(request, *args, **kwargs) 
    return decorated 

を別のユーザーとして)。

2

だけLoginViewをインポートし、合格 - redirect_authenticated_user=True すべてのものはurls.pyに完成する予定

Soがurls.pyは-

from django.conf.urls import url 
    from django.contrib.auth.views import LoginView 


urlpatterns = [ 

    url(r'^login/$', LoginView.as_view(redirect_authenticated_user=True), name='login'), 

] 

です。 LoginViewの引数は、ログインしたユーザーをリダイレクトすることで問題を処理します。 documentationで読むことができます。

関連する問題