#php #cakephp
#php #cakephp
Вопрос:
это отлично работает для моего действия «зарегистрироваться», но не работает для моего действия «Забыть пароль».
Проверка NotEmpty работает для обоих, но моя пользовательская проверка соответствия значений в password и confirm password не работает с моим «forgetPassword», но она работает с моим действием «register».
Вот фрагмент кода проверки подлинности из моей модели
'confirm_password' => array(
'confirm password field cannot be empty' => array(
'rule' => 'notEmpty',
'message' => 'This field cannot be left empty'
),
'confirm password must match password' => array(
'rule' => 'matchPassword',
'message' => 'The two passwords do not match'
)
),
и вот другие методы в моей модели
public function matchPassword($check){
if(strcmp($this->data['User']['password'],$this->data['User']['confirm_password']) != 0){
$this->invalidate('password','The two password do not match');
return false;
}
return true;
}
public function beforeSave($options = array()){
if(!$this->id){
$passwordHasher = new SimplePasswordHasher();
$this->data['User']['password'] = $passwordHasher->hash($this->data['User']['password']);
}
return true;
}
и мой forget_password.ctp
<h1>Enter Your New Password</h1>
<?php echo $this->Form->create(); ?>
<?php echo $this->Form->input('password'); ?>
<?php echo $this->Form->input('confirm_password', array('type' => 'password','label' => 'Type again')); ?>
<?php echo $this->Form->submit('Change', array('class' =>'button')); ?>
<?php echo $this->Form->end(); ?>
И вот метод обновления пароля, который я использую в контроллере для обновления пароля
protected function _updatePassword($id,$password){
$this->User->id = $id;
$this->User->data['User']['password'] = $password;
if($this->User->save($this->User->data,false)){
return true;
} else{
return false;
}
}
Обновление: Вместо того, чтобы делать
$password = $this->request->data['User']['password'];
а затем передает этот $ password в качестве аргумента _updatePassword($id, $ password), чтобы использовать его как $this->User->data['User']['password'] = $password;
$this->user->save($this->User->data);
теперь я делаю $this->User->save($this->request->data);
, и проверка работает. Но проблема с хэшем пароля все еще существует.
Обновление 2:
Даже я удалил это if(!$this->id){
, это не работало. итак, я использовал что-то подобное в своем контроллере
if($this->request->is('post')){
$this->User->id = $id;
$passwordHasher = new SimplePasswordHasher();
if(isset($this->request->data['User']['password']) and isset($this->request->data['User']['confirm_password'])){
$this->request->data['User']['password'] = $passwordHasher->hash($this->request->data['User']['password']);
$this->request->data['User']['confirm_password'] = $passwordHasher->hash($this->request->data['User']['confirm_password']);
}
if($this->User->save($this->request->data)){
Для выполнения задачи.
Комментарии:
1. Вы устанавливаете
validate = false
в вашем all значение$this->User->save
(второй параметр).2. @Holt, о, прости. Я не знал, что второй параметр предназначен для отключения проверки. Я просто взял этот шаблон из поиска Google по serveral issues и никогда не понимал, что это для отключения проверки. Спасибо. Редактировать: нет, я удалил это ‘false’ из моего второго параметра, но он все еще не проверяется. Кстати, как насчет проблемы с паролем?
3. Я даже изменил второй параметр на true, и это не сработало.
4. Я не понимаю, почему вы передаете пароль в качестве вторых параметров своей функции, а затем выполняете
$this->User->data['User']['password'] = $password;
?5. @Holt Хорошо, проверка теперь работает. Смотрите мое обновление. Но проблема с хэшем пароля все еще существует.