2016-07-29 35 views
0

我準備了用於編輯用戶配置文件(名稱,姓氏,電子郵件和密碼)的視圖和表單。問題是我能夠更改用戶配置文件(密碼),但在所有django重定向到登錄視圖後。看起來,django在數據更改後註銷用戶。但爲什麼?django用戶配置文件使用login_required編輯

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

從Django文檔上更改密碼https://docs.djangoproject.com/en/1.9/topics/auth/default/#changing-passwords):

更改如果啓用了 SessionAuthenticationMiddleware用戶的密碼將註銷其所有會話。有關更改密碼的詳細信息,請參閱會話無效 。

這是一個標準程序,你將不得不從您的中間件刪除SessionAuthenticationMiddleware如果你堅持不reloging用戶。

+0

調用'update_session_auth_hash'而不是禁用會話認證中間件可能是一個更好的主意(請參閱[此問題上的答案](http://stackoverflow.com/questions/36158486/django-password-change)) 。這樣,其他會話將被註銷,但當前會話保持登錄狀態。 – Alasdair