2017-03-10 17 views
1

現在、Djangoログイン/ログアウトが正しく機能するようにしようとしていますが、ログインして一度ログアウトすると問題が発生します。同じユーザーまたは別のユーザーとして再度ログインすると、もうログアウトできなくなります。私は現在、何が起こっているのか分からないので誰もこれまでに経験したことがあるのか​​不思議です。contrib.auth.logoutとログアウト(要求)を呼び出す自分のログアウトビューを試しました。2回目のDjangoログアウトが機能しない

はあなたに

をありがとう - EDIT 1から

私は、これは、キャッシング問題になる可能性が考え始めていますが、私は非常にそれを疑います。

MY_APP/urls.py:

from django.conf.urls import url 
from django.contrib.auth import views as auth_views 

from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name = 'index'), 
    #url(r'^login/$', auth_views.login, name = 'login'), 
    #url(r'^logout/$', auth_views.logout, name = 'logout'), 
    url(r'^login/$', views.login_view, name = 'login_view'), 
    url(r'^logout/$', views.logout_view, name = 'logout_view'), 
    ... 
] 

MY_APP/views.py:

... 

def index(request): # Main login page 
    if request.user.is_authenticated: 
     user = request.user 
     gen_prof = General_Profile.objects.get(user_id = user.id) 
     return redirect('home_page', permanent = True) 

    return redirect('login_view', permanent = True) 


def login_view(request): 
    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      cleaned = form.cleaned_data 
      username = cleaned['username'] 
      password = cleaned['password'] 
      user = authenticate(username = username, password = password) 
      if user is not None: 
       login(request, user) 
       gen_prof = General_Profile.objects.get(user_id = user.id) 
       # Redirect to a success page. 
       return redirect('home_page', permanent = True) 
      #else: 
       # return HttpResponse("user is None") 
       # Return an 'invalid login' error message. 
    else: 
     form = LoginForm() 

    template = loader.get_template('cloud/login.html') 
    context = {'form': form} 

    return HttpResponse(template.render(context, request)) 


def logout_view(request): 
    logout(request) 

    return redirect('login_view', permanent = True) 

... 

と私はログアウトボタンのURLとしてlogout_viewを使用したテンプレートで

。私も私の機能のための@login_requiredデコレータを使用しています

urlpatterns = [ 
    url(r'^$', views.index, name = 'index'), 
    url(r'^accounts/login/$', auth_views.login), 
    url(r'^login/$', auth_views.login, name = 'login_view'), 
    url(r'^logout/$', auth_views.logout, name = 'logout_view'), 
    #url(r'^login/$', views.login_view, name = 'login_view'), 
    #url(r'^logout/$', views.logout_view, name = 'logout_view'), 
    ... 
] 

- - EDIT 2

私urls.pyは今、このです。私が把握しようとしているのは、提供されているログインとログアウトビューをDjangoの現在のビューと一緒に実装する方法です。

あなたのログインおよびログアウトビューで恒久的なリダイレクトを使用している
+1

'logout'のようなコードを表示 – Bijoy

+0

@Bijoyを編集しました – Evachine

答えて

2
return redirect('login_view', permanent = True) 

。これは、ブラウザがターゲットページにまっすぐに進むので、サーバはユーザをログインまたはログアウトしないことを意味します。

permanent = Trueを削除しても、ブラウザは永続的なリダイレクトを保存することがあります。別のブラウザを使用してコードをテストすることができます。

Djangoには、ログインビューとログアウトビューが付属しています。私はあなたがこのミスや他人を避けるために使用することをお勧めします。

+0

ありがとうございました!私はそれを試みましたが、Djangoのログインとログアウトのビューの使い方を理解するのにはいくつか問題があります。あなたのコメントの後に私の変更のための上記の2 **の編集を見てください – Evachine

関連する問題