我有一个auth.login()
表单用于登录。
我想要达到的目标是:当我输入username
和password
时,
验证器获取password
并计算其bcrypt
哈希值,并将其与存储在MySQL dB中的哈希值进行比较。
现在,感谢Anthony,我知道需要修改CRYPT()
方法。
到目前为止我在db.py
中的所作所为:
def check(value):
//do bcrypt logic here
class CUSTOM_CRYPT:
def __init__(self, error_message='error'):
self.e = error_message
def __call__(self, value):
if check(value):
return (value, None)
return (value, self.e)
custom_auth_table.password.requires = [IS_STRONG(min=5, special=0, upper=0, number=0),CUSTOM_CRYPT()]
这给了我错误:
Validation error, field:password <__restricted__.CUSTOM_CRYPT instance>
我该如何使这项工作?谢谢!
我的MySQL数据库(auth-user表)只包含以下条目:
ID | Username | Password
1 | tom93 | $2b$12$5vkWB4HzKsOqvbII2IV9m.MqxLi9/fqrjbzyiett.a.6iQEf/p6Su
2 | jan88 | $2b$12$eovbX99oTIvz6ItgVsqI4e6o9KJuILHzZxnF.EVM0qbAU1xFrBi2.
答案 0 :(得分:1)
不,您不希望自定义验证程序进行检查(它不知道要检查的内容 - 通过web2py验证代码处理)。相反,验证器应该只用于将传入的明文密码转换为您要存储在数据库中的密码哈希。工作流程如下:
所以,你想要这样的东西:
def bcrypt_validator(password):
return (bycrpt(password), None)
custom_auth_table.password.requires = [IS_STRONG(min=5, special=0, upper=0, number=0),
bcrypt_validator]
其中bcrypt
函数(您必须定义)生成要存储在数据库中的哈希。