【发布时间】:2017-08-01 21:12:45
【问题描述】:
我正在尝试使用 Auth 在我的 Kohana 应用程序中强制使用强密码,方法是使用以下正则表达式要求至少一个大写字母、一个小写字母、一个数字、一个非字母数字(特殊字符),最少 8 个字符。
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$
正则表达式正在运行,如Rubular 所示。这是我在 Kohana 的 Model_Auth_User 中使用的代码,它扩展了 ORM。
public function rules() {
return array(
'password' => array(
array('not_empty'),
array('min_length', array(':value', 8)),
array('regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/'))
)
);
}
但是,在创建新用户帐户或更改现有用户帐户的密码时,此正则表达式似乎完全被忽略了。上面一行中的min_length 工作正常!
它会阻止我使用 test 作为密码,因为它少于 8 个字符,但 testing123 不会给出任何类型的错误消息。
任何想法为什么会发生这种情况以及解决方法?
【问题讨论】:
-
您将密码存储为哈希?如果我记得 ORM 规则适用于数据库值,而不是 REQUEST 值。
-
@bato3 是的,密码是散列的。不过,密码验证是在加密之前对 POST 值运行的。
-
我知道这一点。我正在尝试解释为什么 up 代码不起作用。
save没有额外的验证使用内部值,这是在set方法上散列的。因此,您必须使用额外的验证初始化原始 (POST) 值。 kohanaframework.org/3.3/guide-api/Model_Auth_User#filters, #set, #create -
我已经更新了我的问题和答案,使其更加清晰。感谢您的宝贵时间。
标签: regex passwords kohana kohana-3.3 kohana-auth