用户验证通过用户模型在CakePHP中无法正常工作

bob*_*obb 0 php cakephp model cakephp-1.3

出于某种原因,我不能按照我的意愿使用此验证,特别是使用密码minLength字段.

其他一切都很好(甚至用户名的minLength工作).出于某种原因,当我在密码字段中添加相同的minLength规则时,它只是忽略它,当我实际输入密码时,它告诉我需要输入密码:

    var $validate = array(
'email' => array(
    'email' => array(
        'rule' => array('email', true),
        'required' => true,
        'allowEmpty' => false,
        'message' => 'Please enter a valid email address'
    ),
    'isUnique' => array(
        'rule' => 'isUnique',
        'message' => 'This email is already in use'
    )
),
'username' => array(
    'notEmpty' => array(
        'rule' => 'notEmpty',
        'required' => true,
        'message' => 'Please enter a valid username'
    ),
    'allowedCharacters' => array(
        'rule' => '/^[a-zA-Z]+[0-9]*$/',
        'message' => 'Please enter a valid username'
    ),
    'minLength' => array(
        'rule' => array('minLength', 3),
        'message' => 'Please enter a longer username'
    ),
    'maxLength' => array(
        'rule' => array('maxLength', 23),
        'message' => 'Please enter a shorter username'
    ),
    'isUnique' => array(
        'rule' => 'isUnique',
        'message' => 'That username is already taken'
    )
),
'password' => array(
    'notEmpty' => array(
        'required' => true,
        'allowEmpty' => false,
        'message' => 'Please enter a password'
    ),
    'minLength' => array(
        'rule' => array('minLength', 4),
        'message' => 'Please enter a longer password'
    ),
     'passwordConfirm' => array(
        'rule' => array('checkPasswords'),
        'message' => 'Passwords must match'

       )
    ),
   );
Run Code Online (Sandbox Code Playgroud)

我忽略了一些小事吗?这让我疯了.

Ros*_*oss 5

发生这种情况是因为在Cake中,密码字段会在您提交后自动进行哈希处理; 这将破坏您的验证规则(5个字符的密码突然变成40+数字哈希).针对此问题提出各种修复方案.

听起来最有希望的一个:

创建两个字段,例如pw,pw_confirm而不是passwordconfirm_password.使用这些值进行密码验证(因此,最大长度等)

然后像:

$this->User->set($this->data);
if ($this->User->validates()) {
    // all your data validates, so hash the password submitted,
    // ready for storage as normal.
    $password_hash = $this->Auth->password($this->data['User']['pw'];
    $this->data['User']['password'] = $password_hash;
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,Cake不会自动对输入的传递进行哈希处理 - 允许您的验证按预期运行.

要想象这一点,请将其添加到register/ add user方法:

function admin_add() {
    if (!empty($this->data)) {
        debug($this->data); 
        exit;
Run Code Online (Sandbox Code Playgroud)

你会得到:

Array
(
    [User] => Array
        (
            [username] => somename
            [password] => 25ae3c1689d26b20e03abc049982349482faa64e
        )

)
Run Code Online (Sandbox Code Playgroud)

在验证发生之前.