session 修改密码python_django用户在密码更改后注销

在Django项目中,用户更改密码后会被自动注销,即使密码更改成功。问题在于视图函数中,密码更改后没有进行重新验证用户。用户期望能够直接重定向到仪表板,而不是被强制登出。代码显示使用了标准的Django表单和认证框架,但没有包含重新验证用户的步骤。
摘要由CSDN通过智能技术生成

我对Django用户更改密码有问题——我在Django建立了几个生产站点,大约一年(或1.8年)没有,但我不记得以前有过这个问题。

摘要

当用户更改其密码时,该用户将注销,但密码已成功更改。

详细信息

我有一个允许用户更改密码的视图,我使用的是标准的django表单和auth框架,并且强调:更改密码是有效的,它只是将用户注销,以便他们必须再次登录。

实际上我并不介意这样,我更希望用户通过消息更新重定向到他们的仪表板,如果我需要在代码中重新验证用户,那么我会,只是看起来有点笨拙。

以下是我的视图函数:@login_required

def user_change_password(request):

"""Allows a user to change their password"""

if request.method == "POST":

form = SubscriberPasswordForm(request.POST)

if form.is_valid():

try:

request.user.set_password(form.cleaned_data['password'])

request.user.save()

except Exception, err:

print "Error changing password: {}".format(err)

messages.add_message(request, messages.ERROR, 'The password could not be changed, please try again '

'later. This admins have been notified of this error.')

else:

#this outputs True

print request.user.is_authenticated()

messages.add_message(request, messages.INFO, 'Your password has been changed successfully')

return HttpResponseRedirect("/accounts/dashboard/")

else:

form = SubscriberPasswordForm()

return render(request, "accounts/change-password.html", {"form": form})

因此,密码被更改,用户被重定向到仪表板页面,@login所需的装饰器然后将它们重定向回登录屏幕。

密码表单在这里,尽管它非常简单。class SubscriberPasswordForm(forms.Form):

password = forms.CharField(widget=forms.PasswordInput)

cpassword = forms.CharField(widget=forms.PasswordInput)

def clean_cpassword(self):

password1 = self.cleaned_data.get("password")

password2 = self.cleaned_data.get("cpassword")

if password1 and password2 and password1 != password2:

raise forms.ValidationError(

self.error_messages['password_mismatch'],

code='password_mismatch',

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值