Есть некоторые проблемы проверки, которые появляются только при использовании компонента Auth. У меня 4 поля в моей регистрационной форме: username
, password
, password_confirm
и email
.Ошибка проверки компонентов компонента CakePHP
У меня также есть многозначное поведение, связанное с моей моделью пользователя. Вот правила, которые применяются к регистрационной форме:
var $validationSets=array(
"register" => array(
"username" => array(
"usernameFieldNotEmpty" => array(
"rule" => "notEmpty",
"message" => "You did not enter the username!"
),
"usernameValid" => array(
"rule" => "__alphaNumericDashUnderscore",
"message" => "The username you entered is not valid!"
),
"usernameExistsInDatabase" => array(
"rule" => array("__existingRecord", false),
"message" => "The username you entered has been already registered in our database!"
)
),
"password" => array(
"passwordFieldNotEmpty" => array(
"rule" => "notEmpty",
"message" => "You did not enter your password!"
)
),
"password_confirm" => array(
"passwordConfirmFieldNotEmpty" => array(
"rule" => "notEmpty",
"message" => "You did not confirm your password!"
),
"passwordsMatch" => array(
"rule" => array("__fieldMatch", "password"),
"message" => "The passwords you entered don't match!"
)
),
"email" => array(
"emailFieldNotEmpty" => array(
"rule" => "notEmpty",
"message" => "You did not enter the e-mail!"
),
"emailValid" => array(
"rule" => "email",
"message" => "The e-mail you entered is not valid!"
),
"emailExistsInDatabase" => array(
"rule" => array("__existingRecord", false),
"message" => "The e-mail you entered has been already registered in our database!"
)
)
/*"language" => array(
)*/
)
Вот моя форма регистра:
<?php echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'register')));?>
<fieldset>
<legend><?php __('Add User'); ?></legend>
<?php
echo $this->Form->input('username');
echo $this->Form->input('password', array('type' => 'password', 'value' => ''));//value='' - resets the password input on any error on the page
echo $this->Form->input('password_confirm', array('type' => 'password', 'value' => ''));
echo $this->Form->input('email');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
Теперь, каждый раз, когда я отправить форму EMPTY, поле пароля, хотя пустой, проходит все проверки тесты (я поставил в код value => ''
, но это бесполезно). Кроме того, ввод электронной почты, кажется, проходит тест 'notEmpty'
и ошибка показала, что The email is not valid
Я просмотрел весь мой код, но не смог найти какое-либо решение.
как вы проверяете пароли друг против друга? –
поле пароля, используемое с auth, никогда не будет пустым, все, что вы хотите сделать, - проверить, что поле compare_pw действительно, и хешированная версия соответствует полю пароля. вы правильно говорите, что ваше решение - это взломать. вы можете сравнить, например, return security :: hash ($ this-> data ['User'] ['compare'], null, true) === $ this-> data ['User'] ['password']; – dogmatic69
Вот что я сделал. На самом деле, моя проблема вошла в контроллер, как я могу «сбросить» поле пароля. Я понял это в «редактировании» ниже. Но вместо Security :: hash() я использовал $ this-> Auth-> password(), чтобы быть в тональности с компонентом Auth ... :) Также важно отметить, что поле 'password' будет быть хэшированным ТОЛЬКО, когда у вас также есть поле «имя пользователя» в форме. В противном случае он останется открытым текстом. – linkyndy