在 Kohana Auth 中强制使用强密码

Enforcing strong passwords in Kohana Auth

我正在尝试使用 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 不会给出任何类型的错误消息。

知道为什么会发生这种情况以及解决方法吗?

明白了 - 您必须将正则表达式添加到 get_password_validation 函数(在同一模型中),否则它不会输出任何错误消息。

public static function get_password_validation($values) {
    return Validation::factory($values)
        ->rule('password', 'min_length', array(':value', 8))
        ->rule('password', 'regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/'))
        ->rule('password_confirm', 'matches', array(':validation', ':field', 'password'));
}

如果添加,需要删除 rules() 函数中的正则表达式,否则无法登录,因为它对不包含任何特殊字符的散列字符串运行正则表达式检查。

希望这对某人有所帮助。