繁体   English   中英

Django authenticate()重置密码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM