主要难点:
1、密码加密
yii2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较)。yii2有自己的加密以及密码验证流程。
加密 $hash = yii::$app->getsecurity()->generatepasswordhash('123456']);
验证 yii::$app->getsecurity()->validatepassword('123456', $hash),返回true或false
2、返回信息处理
yii::$app->session->setflash('contact','旧密码错误');//设置 flash
return $this->goback(); //页面转跳
yii::$app->session->getflash('contact'); //获取 flash
public function actionpassword(){ $model=new passwordform; $request = yii::$app->request; if($request->ispost){ $p = $request->post('passwordform'); $id = yii::$app->user->id; $admin= admin::findidentity($id); $password = $admin->password; if(yii::$app->getsecurity()->validatepassword($p['password'], $password)){ if($p['pass1'] == $p['pass2']){ $newpass = yii::$app->getsecurity()->generatepasswordhash($p['pass1']); $connection = \yii::$app->db; $r = $connection->createcommand()->update('admin', ['password' => $newpass], 'id='.$id)->execute(); if($r){ yii::$app->user->logout(); return $this->gohome(); }else{ return $this->goback(); } } }else{ yii::$app->session->setflash('contact','旧密码错误'); return $this->redirect(array('site/password')); } }else{ return $this->render('password',['model'=>$model]); } }
代码优化:主要优化细节如下
1、将控制器中的主要逻辑代码移入模型中
2、优化数据库操作
控制器中:
public function actionpassword(){ $model=new passwordform; $request = yii::$app->request; if($request->ispost && $model->load(yii::$app->request->post()) && $model->changepassword()){ yii::$app->user->logout(); return $this->gohome(); }else{ return $this->render('password',['model'=>$model]); } }
模型中:
public function changepassword(){ $id = yii::$app->user->id; $admin= admin::findidentity($id); $password = $admin->password; if(yii::$app->getsecurity()->validatepassword($this->password, $password)){ if($this->pass1 == $this->pass2){ $newpass = yii::$app->getsecurity()->generatepasswordhash($this->pass1); $admin->password = $newpass; if($admin->save()){ return true; }else{ return false; } }else{ yii::$app->session->setflash('contact','两次新密码不相等'); return false; } }else{ yii::$app->session->setflash('contact','旧密码错误'); return false; } }
http://www.bkjia.com/phpjc/1033242.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1033242.htmltecharticleyii框架下实现密码修改,yii框架密码修改 yii2 实现修改密码功能 主要难点: 1、密码加密 yii2对密码加密生成的结果是不同的,即用相同的...
