2016-10-26 25 views
0

私は最近、私のDjangoアプリケーションのログアウト機能が壊れていると感じました。私はそれが過去に働いたと信じていますが、なぜ今働いていないのか分かりません。私のセットアップですログアウト後にDjangoセッションが削除されない

のindex.html:

... 
{% if request.user.is_authenticated %} 
    <a style="position: absolute; top: 0; left: 0;" href="{% url 'auth_logout' %}">Logout</a> 
{% else %} 
    <a style="position: absolute; top: 0; left: 0;" href="{% url 'auth_login' %}">Login</a> 
{% endif %} 
... 

urls.py:

... 
from django.contrib.auth import views as auth_views 
... 

urlpatterns = [ 
    ..., 
    url(r'^accounts/logout/$', auth_views.logout, name='auth_logout'), 
    url(r'^accounts/login/$', auth_views.login, name='auth_login'), 
    ... 
] 

テンプレート:

login.htmlと:

{% extends 'simple_logo_base.html' %} 

{% block content %} 
    <div class="row"> 
     <div class="col-md-3"></div> 
     <div class="col-md-6"> 
      <h2>Login</h2> 
      {% if next %} 
       <form action="/accounts/login/?next={{next}}" method="post" > 
      {%else%} 
       <form action="/accounts/login/" method="post" > 
      {% endif %} 
       {% csrf_token %} 
       {{ form.as_p }} 
       <button type="submit">Login</button> 
      </form> 
     </div> 
     <div class="col-md-3"></div> 
    </div> 
{% endblock %} 

のlogout.html: "simple_logo_base.htmlは" のロゴを含むdiv要素を持つ単純なHTML構造である

{% extends 'simple_logo_base.html' %} 

{% block content %} 
    <h2 class="text-center">Logged out</h2> 
{% endblock %} 

問題: ログインは完全に正常に動作します。制限付きindex.htmlページにアクセスしようとすると、ログインページにリダイレクトされ、ログインして制限付きページにアクセスできます。

「ログアウト」ボタンをクリックすると(上記参照)、私はlogout.htmlページにもリダイレクトされますが、index.htmlに戻ってまだログインできます

したがって私はデータベースの "django_sessions"テーブルを見て、セッションが決して削除されないことに気付きました。手動で削除すると、index.htmlにアクセスするときに再びログインページにリダイレクトされます。

私は間違っていますか?何が問題なの?

私は最近、Django 1.10にアップグレードしました。また、Cachingフレームワークをプロジェクトに追加しました。これらの変更のいずれかに関連していますか?

答えて

0

私はこの間に問題を解決しました。しかし、私は正確な問題が何だったのか分かりません。

  • リセットすべての認証関連のURLのコンフィグ
  • 使用@vary_on_cookieデコレータに基づくキャッシュ・ページへ:ここに誰の経験同様の問題は、私が試してみました(そしてそれは明らかに私のために問題を解く)のものであればセッション
  • クリアすべてのキャッシュやセッション

私は問題は、キャッシングに主に関連していたと思います。 @cache_pageデコレータを使用する場合、キャッシュは要求されたURLのみに基づいています。したがって、すでにログアウトしていたとしても、すべてのユーザーが同じキャッシュページを受信しました。ただし、ログアウト時にセッションが削除されなかった理由については説明しません。だから多分何かがここでの主な問題でした。

関連する問題