嘿,我正在使用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验证程序,我相信这样我就可以登录并且也可以安全了,请不要使用内置的重置密码,因为这是不同的我正在尝试做一些事情,甚至可以实现远非如此的目标。谢谢
答案 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
函数提取出转换后的值,该值是返回的元组的第一个元素。