检查CakePHP中的注册密码长度问题

时间:2011-03-29 21:41:26

标签: cakephp passwords

我正在尝试编写基本用户注册页面,我的问题是检查password长度字符串。我已经阅读了各种问题和解决方案,但我仍然遇到麻烦。

这就是我写的:

class UsersController extends AppController {

    function register () {
        if (!empty ($this->data)) {
            if ($this->data['User']['password'] == $this->Auth->password($this->data['User']['password_confirm'])) {
                if ($this->User->save($this->data)) {
                    $this->Session->setFlash('All ok');
                    $this->redirect(array('action', 'login'));
                }
            } else {
                $this->Session->setFlash('Password mismatch');
                $this->redirect(array('action', 'register'));
            }
        }
    }
}

然后是用户模型:

var $validate = array (
    'username' => array (
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => true,
            'message' => 'Alphanumeric chars only'
        ),
        'between' => array(
            'rule' => array('between', 1, 24),
            'message' => 'Username between 1 and 24 chars'
        )
    ),
    'password' => array (
        'between' => array(
            'rule' => array('between', 7, 25),
            'message' => 'Password between 8 and 24 chars'
        )
    )
);

档案register.ctp

<?php
echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->input('password_confirm', array('type' => 'password'));
echo $this->Form->end('Register account');
?>

密码和password_confirm检查工作正常,如果我写了不同的密码我得到错误,如果密码相等,我得到密码长度错误,我错了?

日志:

2011-03-29 23:20:41 Error: Array
(
    [User] => Array
    (
        [username] => tonino
        [password] => ae4f47749b697085b2f7322383fa7b14c79e06f6
        [password_confirm] => passwordtest
    )

)

我忘了说我的密码是SHA1 hashed,所以如何检查用户是否写了太长的密码?

1 个答案:

答案 0 :(得分:2)

AuthComponent会自动对密码进行哈希处理。您正在进行的所有验证都是使用密码"ae4f47749b697085b2f7322383fa7b14c79e06f6"完成的,而不是"passwordtest",这就是验证失败的原因。您需要在password_confirm字段上进行验证,而不是password字段。

请参阅here,了解一个有点透明的解决方案示例。