出于某种原因,我无法按照我的意愿使用此验证,特别是使用密码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'
)
),
);
我是否忽视了一些小事?这让我疯了。
答案 0 :(得分:5)
这是因为在Cake中,密码字段会在您提交后自动进行哈希处理;这将破坏您的验证规则(5个字符的密码突然变成40+数字哈希)。提出了各种fixes for this problem。
听起来最有希望的一个:
创建两个字段,例如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;
}
这样,Cake不会自动对输入的传递进行哈希处理 - 允许您的验证按预期运行。
要想象这一点,请将其添加到您的register
/ add user
方法:
function admin_add() {
if (!empty($this->data)) {
debug($this->data);
exit;
你会得到:
Array
(
[User] => Array
(
[username] => somename
[password] => 25ae3c1689d26b20e03abc049982349482faa64e
)
)
验证发生之前。
答案 1 :(得分:2)
看起来你的验证数组中有一个小错误。
字段的每次验证都必须有一个“规则”键,并且在“notEmpty”验证中没有。
尝试更新密码验证,如下所示:
<?php
array(
'password' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'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'
)
))
?>
另请注意,如果您使用的是Auth组件,则在验证密码之前将对其进行哈希处理。这意味着即使您输入一个3个字符的密码,您最终也会得到一个40个字符的哈希值,这显然会验证为比minLength更长。
答案 2 :(得分:0)
使用我的更改密码行为。它在一个干净的地方照顾所有这些东西: http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/
否则你肯定会遇到更多问题 因为您需要丢失密码并更改密码功能。 也许管理员的后端也可以简单地更改密码
和你的问题我已经评论过: “你也应该在这里使用last =&gt; true!否则它没有多大意义” 我相信这也是你问题的一部分。您的所有规则都需要此参数才能使其正常运行。否则错误消息将被关闭。