web2py 我需要在 CRYPT 中以编程方式更新密码字段

web2py I need to programmatically update a password field when it's in CRYPT

我正在使用 web2py 设计我的 Law_firm 管理应用程序,但出于某种原因,我希望能够以编程方式更新控制器中的密码,但是当我这样做时,它显示为一个普通的未加密字符串,你可以被阅读。那么我如何将 CRYPT 验证程序应用于我的更新,因为我无法使用新的未加密密码登录,这是我在控制器中的代码 spinet。

record = db.auth_user(confirm.id)
            if record:
                new_password = password_generator(12, UPPER_ALPHANUM)
                record.update_record(password=new_password)

注意:password_generator(a,b) 是一个全局函数,我在其中一个模型中构建了一些生成随机密码的地方,我必须使用它来更新现有密码。但事实证明,当我检查数据库而不是得到这样的东西时

pbkdf2(1000,20,sha512)$aee0b78b97611f11e6595198b550ef26b7d2b5ef6a507c0a3cf858

我最终得到了这个

D4SO0GSIK98W

而且我无法登录,而且它不安全,所以我该如何应用 CRYPT 验证器,我相信这样我可以登录,而且我也很安全,拜托,我不想使用内置的重置密码因为这是不同的,所以我试图做一些事情来完成一些与那个背景相去甚远的事情。

密码是通过密码字段的验证器(即它的 requires 属性)转换的,因此在更新时应用验证器的最简单方法是使用 .validate_and_update 方法:

db(db.auth_user.id == record.id).validate_and_update(password=new_password)

或者,您可以直接应用验证器:

crypt_validator = db.auth_user.password.requires[0] # The validator is in a list.
hash_password = lambda password: crypt_validator(password)[0]
record.update_record(password=hash_password(new_password))

请注意,每个验证器 returns 一个元组,其中包括(可能已转换的)值和 None 或错误消息。因此,上面的 hash_password 函数提取转换后的值,这是返回的元组的第一个元素。