У меня теперь есть система, проходящая процесс, однако по какой-то причине код для фактического обновления пароля в базе данных ничего не обновляет? После ввода нового пароля и повторного пароля система немедленно перенаправляет на страницу входа, даже если ошибки не отображаются? Какие-нибудь мысли? Благодарю.
Это моя функция сброса
function reset($token=null){
$this->User->recursive=-1;
if(!empty($token)){
$u=$this->User->findBytokenhash($token);
if($u){
$this->User->id=$u['User']['id'];
if($this->request->is('post')){
$this->User->data=$this->request->data;
$this->User->data['User']['username']=$u['User']['username'];
$new_hash=sha1($u['User']['username'].rand(0,100));//created token
$this->User->data['User']['tokenhash']=$new_hash;
// print_r($this->request->data);
// exit;
if($this->User->validates(array('fieldList'=>array('password','password_confirm')))){
if($this->User->save($this->User->data)){
$this->Session->setFlash('Password Has been Updated');
$this->redirect(array('controller'=>'users','action'=>'login'));
}
} else{
$this->set('errors',$this->User->invalidFields());
}
}
} else {
$this->Session->setFlash('Token Corrupted,,Please Retry.the reset link work only for once.');
}
} else{
$this->redirect('/');
}
}
И это мой reset.ctp
<?php echo $this->Form->create('User', array('action' => 'reset')); ?>
<?php
if(isset($errors)){
echo '<div class="error">';
echo "<ul>";
foreach($errors as $error){
echo "<li><div class='error-message'>$error</div></li>";
}
echo "</ul>";
echo '</div>';
}
?>
<form method="post">
<?php
echo $this->Form->input('User.password', array('type' => 'password',
'name' => '$data[User][password]',
'class' => 'form-control'));
echo $this->Form->input('User.re_password', array('type' => 'password',
'name' => 'data[User][re_password]',
'class' => 'form-control'));
?>
<input type="submit" class="button" style="float:left;margin-left:3px;" value="Save" />
<?php echo $this->Form->end();?>
</form>
Пожалуйста, помогите мне, спасибо
Замените ваш код ctp этим
<?php echo $this->Form->create('User'); ?>
<?php
if(isset($errors)){
echo '<div class="error">';
echo "<ul>";
foreach($errors as $error){
echo "<li><div class='error-message'>$error</div></li>";
}
echo "</ul>";
echo '</div>';
}
?>
<?php
echo $this->Form->input('User.password', array('type' => 'password',
'name' => '$data[User][password]',
'class' => 'form-control'));
echo $this->Form->input('User.re_password', array('type' => 'password',
'name' => 'data[User][re_password]',
'class' => 'form-control'));
?>
<input type="submit" class="button" style="float:left;margin-left:3px;" value="Save" />
<?php echo $this->Form->end();?>
Надеюсь, это сработает.
Я только что заметил,
Вы должны использовать $this->User->save($this->request->data)
Проверьте, используя это
echo $this->Form->input('User.password', array('type' => 'password',
'class' => 'form-control'));
echo $this->Form->input('User.re_password', array('type' => 'password',
'class' => 'form-control'));
Пусть атрибут name, созданный cakephp, сопоставляется с таблицей базы данных, полями. Я думаю, что у вас есть только один или 2 ctp и т. Д., Вы просто строите свой проект с самого начала, правильно?
попробуй это :
public function beforeSave() {
if (isset($this->data['User']['password'])) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
return true;
}
и в сброс функции
if($this->User->save($this->User->data,false))
это сработало для меня. Надеюсь, это работает для вас!