2016-07-29 4 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

С Джанго документации по изменения паролей (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

Смежные вопросы