Я пытаюсь настроить проверку для регистрации пользователя, но у меня проблемы. Когда I только имеют поля электронной почты, роли и пароля в массиве $ validation (удалить остальные), он работает и сохранит нового пользователя. Когда я пытаюсь добавить другие поля, они терпят неудачу и выдает сообщение об ошибке «Пользователь не может быть сохранен. Повторите попытку».CakePHP - подтверждение пароля, не позволяющее пользователю регистрироваться
Я уверен, что это проверка re_password. Когда я удаляю валидацию для этого, он работает. Тем не менее, проверка re_password действительно показывает ошибку, когда пароли разные, так что я не знаю, где искать
Вот мой стол пользователи
id | email | password | location | website | role | created | modified
Вот требования к валидации. Чтобы получить его для сохранения нового пользователя, мне нужно удалить все, кроме электронной почты, пароля и роли.
public $validate = array(
'email' => 'email'
,
'password' => array(
'required' => array(
'rule' => array('minLength', '8'),
'message' => 'A password with a minimum length of 8 characters is required'
)
),
're_password' => array(
'required' => array(
'rule' => array('equalTo', 'password'),
'message' => 'Both password fields must be filled out'
)
),
'role' => array(
'valid' => array(
'rule' => array('inList', array('admin', 'author')),
'message' => 'Please enter a valid role',
'allowEmpty' => false
)
),
'location' => array(
'valid' => array(
'rule' => array('notEmpty'),
'message' => 'Please select a location'
)
)
);
Вот форма (массив опций выше, полагал, что это не нужно, чтобы показать)
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->input('re_password', array('type'=>'password', 'label'=>'Re-Enter Password', 'value'=>'', 'autocomplete'=>'off'));
echo $this->Form->input('location', array('options' => $options, 'label' => 'Select Nearest Location'));
echo $this->Form->input('website',array('label'=>'Enter your website, such as www.example.com. '));
echo $this->Form->input('role', array('type' => 'hidden', 'default' => 'user'));
Вот re_password функцию в модели пользователя проверки
function check_user_password($userid) {
$salt = Configure::read('Security.salt');
$this->User->id = $userid;
$hashed_password = $this->User->field('password');
// check password
if($hashed_password == md5($data['User']['re_password'].$salt)) {
return true;
} else {
return false;
}
}
И, наконец, вот функция добавления в UserController
public function add() {
if ($this->request->is('post')) {
$this->User->create(); //create initiates a form on User/add.ctp
if ($this->User->save($this->request->data)) { //save the form data
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('controller' => 'demos', 'action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
}
}
Пожалуйста, дайте мне знать, если есть все, что нужно, чтобы увидеть
По-прежнему не сэкономить. Я проведу отладку, предложенную позже сегодня. Спасибо за подсказку – user2268281
Добро пожаловать. Однако я просто понял, что вы установили ** user ** в качестве значения по умолчанию для скрытого ввода _role_, но вы пытаетесь проверить его на 'array ('admin', 'author')'. – 2013-04-24 11:46:34
Спасибо, вот и все! Когда я использовал аккуратный трюк отладки, вы просто показали мне, что он описал ошибку aadmin/author, которую вы указали. – user2268281