使用 Web2py 自定义 bcrypt 验证
Custom bcrypt validation with Web2py
我有一个用于登录的 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 table)只包含如下条目:
ID | Username | Password
1 | tom93 | bvkWB4HzKsOqvbII2IV9m.MqxLi9/fqrjbzyiett.a.6iQEf/p6Su
2 | jan88 | b$eovbX99oTIvz6ItgVsqI4e6o9KJuILHzZxnF.EVM0qbAU1xFrBi2.
不,您不希望自定义验证器进行检查(它不知道要检查什么——这是通过 web2py 授权代码处理的)。相反,验证器应该简单地用于将传入的明文密码转换为您要存储在数据库中的密码哈希。工作流程如下:
- 注册时,提交的密码通过验证器,其输出(散列密码)存储在数据库中。
- 登录时,提交的密码通过验证程序并进行哈希处理。 web2py 的 Auth 登录方法然后将这个散列密码与存储在数据库中的值进行比较,如果它们不匹配则拒绝登录。
所以,你想要这样的东西:
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
函数(您必须定义)生成要存储在数据库中的散列。
我有一个用于登录的 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 table)只包含如下条目:
ID | Username | Password
1 | tom93 | bvkWB4HzKsOqvbII2IV9m.MqxLi9/fqrjbzyiett.a.6iQEf/p6Su
2 | jan88 | b$eovbX99oTIvz6ItgVsqI4e6o9KJuILHzZxnF.EVM0qbAU1xFrBi2.
不,您不希望自定义验证器进行检查(它不知道要检查什么——这是通过 web2py 授权代码处理的)。相反,验证器应该简单地用于将传入的明文密码转换为您要存储在数据库中的密码哈希。工作流程如下:
- 注册时,提交的密码通过验证器,其输出(散列密码)存储在数据库中。
- 登录时,提交的密码通过验证程序并进行哈希处理。 web2py 的 Auth 登录方法然后将这个散列密码与存储在数据库中的值进行比较,如果它们不匹配则拒绝登录。
所以,你想要这样的东西:
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
函数(您必须定义)生成要存储在数据库中的散列。