2015-08-30 85 views
1

在我的Django的web應用程序註銷用戶後,重定向網頁仍然顯示「註銷」按鈕,而不是「登錄與Facebook」。在下面的代碼中,我遵循django文檔來註銷用戶並將頁面重定向到base.html的主頁。看來我的web應用在註銷後仍然具有user.is_authenticated爲真?我錯過了什麼?Django的用戶註銷失敗重定向首頁

我不能找到任何有用的提示。任何評論非常感謝。

這裏是我的模板HTML

<div class="navbar-form navbar-right"> 
        {% if user.is_authenticated %} 
         <a id="logout" href="/accounts/logout" class="btn btn-success">Logout</a> 
        {% else %} 
         <a id="facebook_login" href="/accounts/facebook/login" class="btn btn-success">Sign in with Facebook</a> 
        {% endif %} 
</div> 

這裏的一部分,是我的urls.py

url(r'^$', 'homepage.views.home', name='home'), 
url(r'^accounts/', include('allauth.urls')), 
url(r'^accounts/logout/$', 'homepage.views.logout', name='logout'), 

這裏是我的主頁/ views.py

# Create your views here. 
def home(request): 
    return render(request, "base.html", {}) 

# ensure only logged in users can access the view. 
@login_required 
def logout(request): 
    logout(request) 
    # Take the user back to the homepage. 
    return redirect('home') 

回答

1

有兩件事情這裏:

  1. 您需要重新排序的URL

來自:

url(r'^accounts/', include('allauth.urls')), 
url(r'^accounts/logout/$', 'homepage.views.logout', name='logout'), 

url(r'^accounts/logout/$', 'homepage.views.logout', name='logout'), 
url(r'^accounts/', include('allauth.urls')), 

這樣,你的註銷優先於allauth的註銷URL模式

  1. 您應該將別名導入爲logout,或將您的logout重命名爲不同。

實施例:

from django.contrib.auth import logout as auth_logout 

然後

def logout(request): 
    auth_logout(request) 

    .... 
+0

作品等魅力!!!謝謝,karthikr! – day

+0

太好了。如果您發現有用,請將答案標記爲已接受 – karthikr

+0

嗨Karthikr,我將其標記爲已接受。感謝您提供快速有效的答案。你會推薦一些開源的django網絡應用程序供我學習嗎?我在網上搜索,但答案是多樣的。這個問題在stackoverflow上多次提到。所以我把它作爲一個評論,我相信你有一個寶貴的答案。 – day