重置密码不';t保存新密码CakePHP 2.0
我现在已经让系统完成了这个过程,但是出于某种原因,实际更新数据库中密码的代码没有更新任何内容?插入新密码和重新密码后,即使未显示任何错误,系统也会立即重定向到登录页面?有什么想法吗?谢谢 这是我的重置功能重置密码不';t保存新密码CakePHP 2.0,php,cakephp,forgot-password,reset-password,Php,Cakephp,Forgot Password,Reset Password,我现在已经让系统完成了这个过程,但是出于某种原因,实际更新数据库中密码的代码没有更新任何内容?插入新密码和重新密码后,即使未显示任何错误,系统也会立即重定向到登录页面?有什么想法吗?谢谢 这是我的重置功能 function reset($token=null){ $this->User->recursive=-1; if(!empty($token)){ $u=$this->User->findBytokenhash($token);
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'));
让cakephp构建的name属性与数据库表、字段相匹配。我认为您只有一个或两个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))
这对我有用。希望它对你有用 在表单标记中的ctp文件上,您不再发送令牌,只需从ctp中的表单标记中删除操作,然后check@BharatMaheshwari是的,我正在使用Auth Too,我还看到两个表单标记打开,一个关闭,删除第二个检查$this->data中有什么。它是否得到$token?我得到token的值,但问题是当提交新密码时,密码没有保存到数据库中,在数据库中仍然超过password@bharat除了更新旧密码之外,您是否在db中检查插入的新行?可能您在$this->data中没有名为“id”的主字段,因此每次我检查数据库时,它都会插入一个新行,我有主字段“id”,并且我也在检查我的数据库,更新旧数据时不会自动插入行one@dery,我无法访问您的项目,我正试图帮助您,你说我很沮丧??如果你想调试代码,沮丧是行不通的。检查用户模型中是否有beforeSave()方法?嘿,能给我你的电子邮件吗?我将发送我的项目,我构建这个项目是为了学习,哈哈哈哈,为什么这个问题在保存之前没有解决公共函数($options=array()){if(!empty($this->data['User']['re_password']){$this->data['User']['password']=AuthComponent::password($this->->data['User']['re_password']);unset($this->data['User'['re_password']))}这是我的beforeSave用户模型