Python 每次调用authenticate()后都会更改用户密码

Python 每次调用authenticate()后都会更改用户密码,python,django,postgresql,Python,Django,Postgresql,我这里真的有个奇怪的问题。每次用户登录(或调用函数authenticate())后,其密码都会随机更改 这就是我调用authenticate()函数的方式 user=authenticate(username,password)//返回成功,但更改实例的密码 另一个信息:问题只发生在我的本地电脑上,而不是在生产中(试图在另一台电脑上解决) 在这一行之后,当我在数据库中检查密码时,密码会发生变化(PgAdmin3中的postgresql) 编辑 这是登录功能 user = authenticate

我这里真的有个奇怪的问题。每次用户登录(或调用函数
authenticate()
)后,其密码都会随机更改

这就是我调用authenticate()函数的方式

user=authenticate(username,password)//返回成功,但更改实例的密码

另一个信息:问题只发生在我的本地电脑上,而不是在生产中(试图在另一台电脑上解决)

在这一行之后,当我在数据库中检查密码时,密码会发生变化(PgAdmin3中的postgresql)

编辑 这是登录功能

user = authenticate(username = data['email'], password = data['password'])
if user:
    if not user.is_active:
        raise ValueError("Inactive user.")
    else:
        login(request,user)
        redirect('home')
else:
    raise ValueError("Invalid username/password.")

您没有提到您使用的是哪个版本的Django,但是在最近的一个补丁中引入了一个新功能,用于在密码被弱散列函数散列时强化密码。此外,Django 1.9还引入了一些新的密码强度验证功能。 我建议您通读以下部分,它看起来可能与您的问题有关:


您可以做的另一件事是修改
User
管理器中的
set\u password()
(可能还有
save()
)方法,并在调用此函数时引发异常-这将为您提供回溯,这可以提示调用was的原因。

您是否在任何地方重写了authenticate函数?我没有。我是django的新手,所以我不知道在哪里修改authenticate函数。顺便说一句,谢谢你的回复。你在比较什么密码?你必须记住,存储在数据库中的密码是散列的,因此比较你发送的密码和存储在数据库中的密码是没有帮助的。因为你似乎对所有这些都不熟悉,我将详细介绍@RodXavier所说的。存储在数据库中的密码不是键入的密码的精确副本。为了防止密码被破解,它们通常通过一种算法进行加密,将其变成乱码(针对人类)。请发布您的登录函数(从您复制这两行代码的地方)。我使用的是django 1.9,我认为我的问题是由新补丁引起的。我会看一看,并给出我的反馈。谢谢我将django从1.9降级到1.8.4,现在一切正常。非常感谢@yed:)
user = authenticate(username = data['email'], password = data['password'])
if user:
    if not user.is_active:
        raise ValueError("Inactive user.")
    else:
        login(request,user)
        redirect('home')
else:
    raise ValueError("Invalid username/password.")