【问题标题】:Django authenticate() resets passwordDjango authenticate() 重置密码
【发布时间】:2016-11-09 13:29:37
【问题描述】:

我有一个奇怪的问题。当我登录时,它按预期工作,但是当我尝试注销并尝试再次登录时,它说我的密码无效。

我检查了我的 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

Postgre 9.4

谢谢!

【问题讨论】:

  • 不可能从那一行中看出问题所在。一定要显示您的 logoutlogin 视图
  • 并展示您如何验证您的密码是否已“更改”。
  • @MosesKoledoye 请查看更新后的问题。
  • @DanielRoseman 请查看更新后的问题。
  • 哈希值不同,因为 Django 正在增加迭代次数(您是从 1.8 升级 Django?)。这不会更改与哈希匹配的密码,因此登录错误很可能是由于其他一些错误。你能展示你的req_data()函数吗?你用hashers 模块做什么?您通常不需要直接与此模块进行交互。

标签: python django postgresql


【解决方案1】:

它现在正在工作。我从没想过它可以在具有不同密码的不同帐户中使用。

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2013-09-21
    • 2012-07-18
    • 2021-04-21
    • 2019-05-25
    相关资源
    最近更新 更多