web2py当我的密码字段位于CRYPT

时间:2018-08-12 00:10:34

标签: web2py

嘿,我正在使用web2py设计我的Law_firm管理应用程序,但是由于某些原因,我想能够以编程方式更新控制器中的密码,但是当我这样做时,它会显示为正常的未加密字符串,您可以阅读该字符串。因此,由于我无法使用新的未加密密码登录,因此如何将CRYPT验证程序应用于更新,这是控制器中的代码小精灵。

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)$aee0b78b97611f11$56e6595198b550ef26b7d2b5ef6a507c0a3cf858

我结束了这个

D4SO0GSIK98W

并且我不能安全登录,所以我该如何应用CRYPT验证程序,我相信这样我就可以登录并且也可以安全了,请不要使用内置的重置密码,因为这是不同的我正在尝试做一些事情,甚至可以实现远非如此的目标。谢谢

1 个答案:

答案 0 :(得分:0)

密码是通过密码字段的验证器(即其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))

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