程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> YII框架下實現密碼修改,yii框架密碼修改

YII框架下實現密碼修改,yii框架密碼修改

編輯:關於PHP編程

YII框架下實現密碼修改,yii框架密碼修改


YII2 實現修改密碼功能

主要難點:

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved