2016-07-29 7 views
0

ユーザープロフィール(名前、姓、メール、パスワード)を編集する目的でビューとフォームを用意しました。問題は、私はユーザープロファイル(パスワード)を変更できるが、すべてのdjangoがログインビューにリダイレクトした後であるということです。 djangoはデータが変更された後にユーザをログアウトするように見えます。しかし、なぜ?djangoのユーザープロフィールをlogin_requiredで編集する

パスワードの変更https://docs.djangoproject.com/en/1.9/topics/auth/default/#changing-passwords)上のDjangoのドキュメントから
view.py 
@login_required() 
def edit_user_view(request): 
    template_name = "user_account/user_edit.html" 
    form = EditUserForm(request.POST or None, instance=request.user) 

    if form.is_valid(): 
     new_user_data = form.save() 
     new_user_data.set_password(form.cleaned_data['new_password_1']) 
     new_user_data.save() 

     return HttpResponseRedirect('/user_account/user_edit/') 
    return render(request, template_name, {'form': form, 
             'edit_succes': True}) 

forms.py 
class EditUserForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ['email', 'name', 'surname'] 

    new_password_1 = forms.CharField(max_length=30, min_length=8) 
    new_password_2 = forms.CharField(max_length=30, min_length=8) 

user_edit.html 
<form action="" method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Save" /> 
</form> 

答えて

0

: SessionAuthenticationMiddlewareが有効になっている場合

ユーザーのパスワードを変更すると、その全セッションをログアウトします。詳細については、パスワードの変更に関するセッション無効化 を参照してください。

それは標準的な手順だと、あなたのユーザーをrelogingないで主張すれば、あなたのミドルウェアからSessionAuthenticationMiddlewareを削除する必要があります。

+0

セッション認証ミドルウェアを無効にするのではなく、 'update_session_auth_hash'を呼び出すことをお勧めします([この質問](http://stackoverflow.com/questions/36158486/django-password-change)の回答を参照) 。そうすれば、他のセッションはログアウトされますが、現在のセッションはログインしたままです。 – Alasdair

関連する問題