ホームページ > バックエンド開発 > PHPチュートリアル > Yii2 メール認証に基づくパスワードを忘れた場合の操作

Yii2 メール認証に基づくパスワードを忘れた場合の操作

不言
リリース: 2023-03-24 12:12:02
オリジナル
1947 人が閲覧しました

この記事では、Yii2 でのメール認証に基づいたパスワードの操作を紹介します。これで、困っている友達と共有できます。

メール送信機能について説明します。使ってみましょう メール送信機能を使った簡単なデモを作ってみましょう

まず、忘れたパスワードを認識するためにどのようなプロセスを実行する必要があるかを整理しましょう

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. 結合されたメールアドレスをクリックすると、メールアドレス変更パスメソッドが入力されます。コントローラーを管理し、トークン、時間、管理ユーザーの属性は GET メソッドを通じて送信されます
    コントローラー内

    モデル層で記述する必要がある唯一のメソッドは、changepass() メソッドです。 updateAll() メソッドが正常に呼び出されたことを確認します

    • 時間が適時であることを確認する必要があります

    • トークンが最初に作成したトークンであるかどうかを確認する必要があります

    • 現在のパスワードを特定する必要があります。POST リクエストがある場合は、ユーザーが変更されたパスワードを入力したことを意味し、モデル ファイルを入力してパスワード ルールを確認する必要があります

       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]);
      }
      ログイン後にコピー

これでこの共有は終了です。

前にメール送信機能について説明しましたが、今度はメール送信機能を使用して小さなデモを作成します

まずパスワードを忘れるためにどのようなプロセスを実行する必要があるかを整理しましょう

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. 結合されたメールアドレスをクリックすると、管理ファイルに emailchangepass メソッドが入力されます。そして、トークン、時刻、管理者ユーザーの属性は GET メソッドを通じて送信されます
    コントローラー内

    モデル層で記述する必要がある唯一のメソッドは、changepass() メソッドです。 updateAll() メソッドが正常に呼び出されたことを確認します

    • 時間が適時であることを確認する必要があります

    • トークンが最初に作成したトークンであるかどうかを確認する必要があります

    • 現在のパスワードを特定する必要があります。POST リクエストがある場合は、ユーザーが変更されたパスワードを入力したことを意味し、モデル ファイルを入力してパスワード ルールを確認する必要があります

       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 リセットフル認証検証

      Yii2.0 PHP using Sphinx

      以上がYii2 メール認証に基づくパスワードを忘れた場合の操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート