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)
我忽略了一些小事吗?这让我疯了.
发生这种情况是因为在Cake中,密码字段会在您提交后自动进行哈希处理; 这将破坏您的验证规则(5个字符的密码突然变成40+数字哈希).针对此问题提出了各种修复方案.
听起来最有希望的一个:
创建两个字段,例如pw,pw_confirm而不是password和confirm_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)
在验证发生之前.
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |