2016-04-01 21 views
0

私のプロジェクトにdjango 1.8を使用していて、パスワードをリセットした後で他のセッションをログオフするためにミドルウェアでdjango.contrib.auth.middleware.SessionAuthenticationMiddlewareを試しました。これは問題ありませんが、私が直面している問題は、パスワードを変更したセッションをログオフしてリセットした後です。私はパスワードをリセットした後、私たちがパスワードを変更したセッションはログオフしないようにしたい。私たちのuserモデルはAbstractUserパスワードを再設定した後のDjango認証の問題

+0

どのようにパスワードをリセットしていますか? – Sayse

答えて

2

から継承されています。あなた自身のビューを使用してパスワードを変更すると、パスワードを変更してユーザーをログオフしないでセッションを更新することができます。

そのためにはupdate_session_auth_hash機能を使用できます。

Djangoのuser_change_passwordパスワード変更後のセッションを更新します。しかし、あなたはカスタムビューを所有するために、あなたはこのようなupdate_session_auth_hash使用することができます。代わりにこのすべてを通過するのsession invalidation on password change

について

from django.contrib.auth import update_session_auth_hash 

def password_change(request): 
    if request.method == 'POST': 
     form = PasswordChangeForm(user=request.user, data=request.POST) 
     if form.is_valid(): 
      form.save() 
      update_session_auth_hash(request, form.user) 
    else: 
     ... 

Djangoのドキュメントを、あなたの代わりにdjango-allauthを使用することができます。素晴らしいアプリであり、あらゆる種類の認証機能を備えています。

+0

@ v1k34とは何ですか?form.userですが、パスワードフィールドのみを含むカスタムフォームがあるので、代わりにrequest.userまたは文字列を渡すことはできますか? – Pramod

+0

はい、 'request.user'も渡すことができます。上記のコードは、パスワードを変更するために私たちが提供したユーザーのセッション認証情報を更新するようにしています。 – v1k45