0

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

任何想法为什么会发生这种情况以及解决方法?

4

1 回答 1

1

想通了-您必须将正则表达式添加到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()需要删除函数中的正则表达式,否则无法登录,因为它对不包含任何特殊字符的散列字符串运行正则表达式检查。

希望这可以帮助某人。

于 2017-03-11T15:31:16.593 回答