歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Yii2 實現修改密碼功能

Yii2 實現修改密碼功能

日期:2017/3/1 9:27:26   编辑:Linux編程

主要難點:

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;
}
}

Yii 用戶登陸機制 http://www.linuxidc.com/Linux/2015-01/111602.htm

Yii中引入js和css文件 http://www.linuxidc.com/Linux/2015-01/111603.htm

Yii 不完全解決方案 http://www.linuxidc.com/Linux/2015-01/111606.htm

Yii CGridView 基本使用 http://www.linuxidc.com/Linux/2015-01/111607.htm

Yii框架分布式緩存的實現方案 http://www.linuxidc.com/Linux/2015-02/113828.htm

Yii 的詳細介紹:請點這裡
Yii 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved