在Kohana Auth中强制使用强密码

时间:2017-03-11 15:11:06

标签: regex passwords kohana kohana-3.3 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没有提供任何类型的错误消息。

任何想法为什么会发生这种情况并绕过它?

1 个答案:

答案 0 :(得分: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()函数中的正则表达式需要被删除,或者无法登录,因为它对散列字符串运行正则表达式检查,该字符串不包含任何特殊内容字符。

希望这有助于某人。