[英]Django authenticate() resets password
我这里有一个奇怪的问题。 登录时,它可以按预期运行,但是当我尝试注销并再次登录时,它表明我的密码无效。
我检查了User表,每次使用authenticate()函数时,它实际上是在更改密码。
我一个月前遇到了这个错误(当时还是django 1.8),但是经过了许多测试,跟踪和祈祷,却对发生的事情一无所知。 但是,它仅发生在我的本地计算机上。
authentication.py
经过authenticate()函数后,我的密码已经更改(试图在该函数后放置一个断点,因此我确定这是罪魁祸首)。
from django.contrib.auth import authenticate, logout, login
def signin(request):
if request.method == "POST":
result = {}
data = req_data(request)
try:
user = authenticate(username = data['email'], password = data['password'])
if user:
if user.is_active:
login(request, user)
#return success for redirection
else:
raise ValueError("This user is inactive. Please contact your admin.")
else:
raise ValueError("Invalid username/password.")
except Exception as e:
return HttpResponse(e, status = 400)
else:
return redirect("login")
def signout(request):
logout(request)
return redirect("login")
#gets the params from ajax post
def req_data(request):
return json.loads(request.body.decode("utf-8")) if request.body.decode("utf-8") else {}
我检查了数据库,并得到了这个结果。
旧密码
pbkdf2_sha256 $ $ 20000 N4esMaOT5BYi $ nIehHw63b + iZSz2Vmu1hEO10BqPfzAGu1cZA1ci / NXI =
新密码 (登录后)
pbkdf2_sha256 $ 24000 $ KVZeuG4pgSkv $ VIenbuq0Wk8sYZros4kE4Q7W0Jt + bOC23ha4 / VSOXV8 =
编辑:
同时,我没有使用authenticate(),而是使用了通用密码。
username = data.get('email',"")
password = data.get('password',"")
if password == "genericpassword123":
try:
user = User.objects.get(email = username)
user.backend = 'django.contrib.auth.backends.ModelBackend'
except User.DoesNotExist:
raise ValueError("Invalid username/password.")
else:
user = authenticate(username = username, password = password)
if user:
if user.is_active:
login(request, user)
#return success for redirection
else:
raise ValueError("This user is inactive. Please contact your admin.")
else:
raise ValueError("Invalid username/password.")
Python 2.7
的Django 1.9
PostgreSQL 9.4
谢谢!
现在正在工作。 我从未想过它可以在具有不同密码的其他帐户中运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.