【发布时间】:2012-06-27 04:04:12
【问题描述】:
使用 Django 的“set_password()”函数更改站点上用户的密码后,密码将更改为加密字符串。但是,用户无法使用新密码或旧密码登录网站 - 之前输入的密码无效。这是获取密码的代码的 sn-p -
if request.POST:
password = request.POST['password'].encode('ascii','replace')
confirm_password = request.POST['confirm_password'].encode('ascii','replace')
if password == confirm_password:
user.set_password(confirm_password)
user.save()
return HttpResponseRedirect('/reset/thanks/')
else:
return HttpResponseRedirect('/reset/' + user.get_profile().forgotpasswordcode + "/" + user.email + "/")
即使帐户的密码已更改为与其相同的密码,加密的密码也会更改,用户无法登录。
有没有办法解决这个问题?谢谢。
【问题讨论】:
-
user定义在哪里? -
为什么要编码为 ASCII?当 Django 将密码保存到数据库时,它会强制使用 unicode,所以实际上,密码 不 匹配,因为 ASCII 与 Unicode 中的相同(表面上)字符串是 not 相同的字符串。
-
User 在前面被定义为一个用户对象。这是一种尝试新事物的尝试——即使保留为 unicode,它也与新密码不匹配。