首頁 > 後端開發 > php教程 > Yii2 基於郵箱驗證的忘記密碼操作

Yii2 基於郵箱驗證的忘記密碼操作

不言
發布: 2023-03-24 12:12:02
原創
1942 人瀏覽過

這篇文章介紹的內容是關於Yii2 基於郵箱驗證的忘記密碼操作 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

之前我講到了發送郵件功能,現在我們就用郵件發送功能來做一個小demo

我們先理一下,我們實現忘記密碼需要執行什麼過程

1. 弹出窗口,提示用户输入用户名和邮箱。2. 验证邮箱,利用md5等等加密拼接token,发送token,当前时间戳,账户名等属性。3. 用户点击邮箱链接,到指定控制器,验证我们的token和时间是否超时。4. 如果都验证成功,则进入修改密码操作
登入後複製
  1. 如果點擊忘記密碼,我們就進入目前控制器的對應方法。
    驗證使用者輸入的郵箱和使用者名,如果驗證成功,執行我們的發送郵件信箱操作

#
//模型文件代码
 public function seekPass($post)
    {
        $this->scenario = "seekPass";        if($this->load($post)&&$this->validate())
        {        $time = time();        $adminuser = $post['Admin']['adminuser'];        
        $token  = $this->createToken($post['Admin']['adminuser'],$time);     
        //自定义方法,创建一个唯一token
        $mailer = \Yii::$app->mailer->compose('seekpass',['text'=>'text','adminuser'=>$post['Admin']['adminuser'],'token'=>$_SERVER['HTTP_HOST'].Url::toRoute(['manage/emailchangepass'])."&timestamp=".$time."&token=".$token."&adminuser=".$adminuser]);            
        $mailer ->setFrom("1115007981@qq.com")
                    ->setTo("1115007981@qq.com")
                    ->setSubject("黑势力科技")
                    ->send();        if($mailer)            return true;
        }        return false;
    }    //拼接的邮箱地址为:

    http://web.demo.com/shop/access/backend/web/index.php?r=manage/Femailchangepass×tamp=1524052534&token=4575d5050f57baf4a896c3924d972c12&adminuser=admin
登入後複製
  1. 如果我們點擊拼接的郵件地址,那麼我們將進入我們的manage控制器中的emailchangepass方法,並且透過GET方法傳輸了我們的token,time,adminuser的屬性
    在控制器中

    在模型層,我們需要寫的方法,也就只有changepass()方法。驗證成功呼叫updateAll()方法

    • 我們需要驗證我們time的時效性,超過5分鐘連線失效

    • ##我們需要驗證該token是否為我們初始建立的token

    • 我們需要識別目前是否有POST請求,有則表示使用者輸入了修改的密碼,則需要進入model檔案中校驗密碼規則


       public function actionEmailchangepass(){
         $this->layout='login';       $time =  Yii::$app->request->get('timestamp');       
         $adminuser = Yii::$app->request->get('adminuser');       $token =  Yii::$app->request->get('token');       $model = new Admin();       $mytoken =  $model->createToken($adminuser,$time);       if($token!=$mytoken)
             {           $this->redirect(['public/login']);
                 Yii::$app->end();
             }       if(time()-$time>300)
             {           $this->redirect(['public/login']);
                 Yii::$app->end();
             }   if(Yii::$app->request->isPost)
         {       $post = Yii::$app->request->post();      if ($model->changepass($post))
            {
                Yii::$app->session->setFlash('info','密码修改成功');
            }
         }   $model->adminuser = $adminuser;   return $this->render('emailchangepass',['model'=>$model]);
      }
      登入後複製

本次分享到此結束。

之前我講到了發送郵件功能,現在我們就用郵件發送功能來做一個小demo

我們先理一下,我們實作忘記密碼需要執行什麼過程

1. 弹出窗口,提示用户输入用户名和邮箱。2. 验证邮箱,利用md5等等加密拼接token,发送token,当前时间戳,账户名等属性。3. 用户点击邮箱链接,到指定控制器,验证我们的token和时间是否超时。4. 如果都验证成功,则进入修改密码操作
登入後複製

  1. 如果點選忘記密碼,我們就進入目前控制器的對應方法。

    驗證使用者輸入的郵箱和使用者名,如果驗證成功,執行我們的發送郵件信箱操作

  2. #
    //模型文件代码
     public function seekPass($post)
        {
            $this->scenario = "seekPass";        if($this->load($post)&&$this->validate())
            {        $time = time();        $adminuser = $post['Admin']['adminuser'];        $token  = $this->createToken($post['Admin']['adminuser'],$time);     //自定义方法,创建一个唯一token
            $mailer = \Yii::$app->mailer->compose('seekpass',['text'=>'text','adminuser'=>$post['Admin']['adminuser'],'token'=>$_SERVER['HTTP_HOST'].Url::toRoute(['manage/emailchangepass'])."&timestamp=".$time."&token=".$token."&adminuser=".$adminuser]);            $mailer ->setFrom("1115007981@qq.com")
                        ->setTo("1115007981@qq.com")
                        ->setSubject("黑势力科技")
                        ->send();        if($mailer)            return true;
            }        return false;
        }    //拼接的邮箱地址为:
    
        http://web.demo.com/shop/access/backend/web/index.php?r=manage/Femailchangepass×tamp=1524052534&token=4575d5050f57baf4a896c3924d972c12&adminuser=admin
    登入後複製
  1. 如果我們點擊拼接的郵件地址,那麼我們將進入我們的manage控制器中的emailchangepass方法,並且透過GET方法傳輸了我們的token,time,adminuser的屬性

    在控制器中

    在模型層,我們需要寫的方法,也就只有changepass()方法。驗證成功呼叫updateAll()方法

    • 我們需要驗證我們time的時效性,超過5分鐘連線失效

    • ##我們需要驗證該token是否為我們初始建立的token
    • 我們需要識別目前是否有POST請求,有則表示使用者輸入了修改的密碼,則需要進入model檔案中校驗密碼規則
    •  public function actionEmailchangepass(){
         $this->layout='login';       $time =  Yii::$app->request->get('timestamp');       $adminuser = Yii::$app->request->get('adminuser');       $token =  Yii::$app->request->get('token');       $model = new Admin();       $mytoken =  $model->createToken($adminuser,$time);       if($token!=$mytoken)
             {           $this->redirect(['public/login']);
                 Yii::$app->end();
             }       if(time()-$time>300)
             {           $this->redirect(['public/login']);
                 Yii::$app->end();
             }   if(Yii::$app->request->isPost)
         {       $post = Yii::$app->request->post();      if ($model->changepass($post))
            {
                Yii::$app->session->setFlash('info','密码修改成功');
            }
         }   $model->adminuser = $adminuser;   return $this->render('emailchangepass',['model'=>$model]);
      }
      登入後複製

      本次分享到此結束。

      相關推薦:

      yii2 resetful 的授權驗證

      Yii2.0 PHP使用Sphinx

      #

      以上是Yii2 基於郵箱驗證的忘記密碼操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板