Rumah pembangunan bahagian belakang tutorial php Yii2 基于邮箱验证的忘记密码操作

Yii2 基于邮箱验证的忘记密码操作

Apr 19, 2018 pm 02:42 PM
yii2 lupa mengesahkan

这篇文章介绍的内容是关于Yii2 基于邮箱验证的忘记密码操作  ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

之前我讲到了发送邮件功能,现在我们就用邮件发送功能来做一个小demo

我们首先先理一下,我们实现忘记密码需要执行什么过程

1. 弹出窗口,提示用户输入用户名和邮箱。2. 验证邮箱,利用md5等等加密拼接token,发送token,当前时间戳,账户名等属性。3. 用户点击邮箱链接,到指定控制器,验证我们的token和时间是否超时。4. 如果都验证成功,则进入修改密码操作
Salin selepas log masuk
Salin selepas log masuk
  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
Salin selepas log masuk
  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]);
      }
      Salin selepas log masuk

本次分享到此结束。

之前我讲到了发送邮件功能,现在我们就用邮件发送功能来做一个小demo

我们首先先理一下,我们实现忘记密码需要执行什么过程

1. 弹出窗口,提示用户输入用户名和邮箱。2. 验证邮箱,利用md5等等加密拼接token,发送token,当前时间戳,账户名等属性。3. 用户点击邮箱链接,到指定控制器,验证我们的token和时间是否超时。4. 如果都验证成功,则进入修改密码操作
Salin selepas log masuk
Salin selepas log masuk
  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
Salin selepas log masuk
  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]);
      }
      Salin selepas log masuk

      本次分享到此结束。

      相关推荐:

      yii2 resetful 的授权验证

      Yii2.0 PHP使用Sphinx

      Atas ialah kandungan terperinci Yii2 基于邮箱验证的忘记密码操作 . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengesahkan tandatangan dalam PDF Bagaimana untuk mengesahkan tandatangan dalam PDF Feb 18, 2024 pm 05:33 PM

Kami biasanya menerima fail PDF daripada kerajaan atau agensi lain, sesetengahnya dengan tandatangan digital. Selepas mengesahkan tandatangan, kami melihat mesej SignatureValid dan tanda semak hijau. Sekiranya tandatangan tidak disahkan, kesahihannya tidak diketahui. Mengesahkan tandatangan adalah penting, mari lihat cara melakukannya dalam PDF. Cara Mengesahkan Tandatangan dalam PDF Mengesahkan tandatangan dalam format PDF menjadikannya lebih boleh dipercayai dan dokumen lebih cenderung untuk diterima. Anda boleh mengesahkan tandatangan dalam dokumen PDF dengan cara berikut. Buka PDF dalam Adobe Reader Klik kanan tandatangan dan pilih Show Signature Properties Klik butang Tunjukkan Sijil Penandatangan Tambah tandatangan pada senarai Sijil Dipercayai daripada tab Amanah Klik Sahkan Tandatangan untuk melengkapkan pengesahan Biarkan

Kaedah terperinci untuk menyahsekat menggunakan pengesahan bantuan rakan WeChat Kaedah terperinci untuk menyahsekat menggunakan pengesahan bantuan rakan WeChat Mar 25, 2024 pm 01:26 PM

1. Selepas membuka WeChat, klik ikon carian, masukkan pasukan WeChat, dan klik perkhidmatan di bawah untuk masuk. 2. Selepas memasukkan, klik pilihan alat layan diri di sudut kiri bawah. 3. Selepas mengklik, dalam pilihan di atas, klik pilihan untuk menyahsekat/merayu untuk pengesahan tambahan.

Bagaimana untuk mengesahkan kod IFSC menggunakan ungkapan biasa? Bagaimana untuk mengesahkan kod IFSC menggunakan ungkapan biasa? Aug 26, 2023 pm 10:17 PM

Kod Sistem Kewangan India ialah singkatan. Cawangan bank India yang mengambil bahagian dalam sistem pemindahan dana elektronik dikenal pasti melalui kod khas 11 aksara. Reserve Bank of India menggunakan kod ini dalam transaksi internet untuk memindahkan dana antara bank. Kod IFSC terbahagi kepada dua bahagian. Bank dikenal pasti dengan empat aksara pertama, manakala cawangan dikenal pasti oleh enam aksara terakhir. NEFT (Pemindahan Dana Elektronik Nasional), RTGS (Penyelesaian Kasar Masa Nyata) dan IMPS (Perkhidmatan Pembayaran Segera) ialah beberapa transaksi elektronik yang memerlukan kod IFSC. Kaedah Beberapa cara biasa untuk mengesahkan kod IFSC menggunakan ungkapan biasa ialah: Semak sama ada panjangnya betul. Semak empat aksara pertama. Semak aksara kelima.Che

Bagaimana untuk mengesahkan sama ada input adalah aksara lebar penuh dalam golang Bagaimana untuk mengesahkan sama ada input adalah aksara lebar penuh dalam golang Jun 25, 2023 pm 02:03 PM

Dalam golang, pengekodan Unicode dan jenis rune diperlukan untuk mengesahkan sama ada input ialah aksara lebar penuh. Pengekodan Unikod ialah standard pengekodan aksara yang memberikan titik kod angka yang unik kepada setiap aksara dalam set aksara, yang merangkumi aksara lebar penuh dan aksara separuh lebar. Jenis rune ialah jenis yang digunakan untuk mewakili aksara Unicode dalam golang. Langkah pertama ialah menukar input menjadi kepingan jenis rune. Ini boleh ditukar dengan menggunakan jenis []rune golang, mis.

Bagaimana untuk mengesahkan sama ada input adalah huruf besar dalam golang Bagaimana untuk mengesahkan sama ada input adalah huruf besar dalam golang Jun 24, 2023 am 09:06 AM

Golang ialah bahasa pengaturcaraan moden berprestasi tinggi yang sering melibatkan pemprosesan rentetan dalam pembangunan harian. Antaranya, mengesahkan sama ada input dalam huruf besar adalah keperluan biasa. Artikel ini akan memperkenalkan cara untuk mengesahkan sama ada input adalah huruf besar dalam Golang. Kaedah 1: Gunakan pakej unicode Pakej unicode dalam Golang menyediakan satu siri fungsi untuk menentukan jenis pengekodan aksara. Untuk huruf besar, julat pengekodan yang sepadan ialah 65-90 (perpuluhan), jadi kita boleh menggunakan unicod

Ciri baharu dalam PHP 8: Ditambah pengesahan dan tandatangan Ciri baharu dalam PHP 8: Ditambah pengesahan dan tandatangan Mar 27, 2024 am 08:21 AM

PHP8 ialah versi PHP terkini, membawa lebih banyak kemudahan dan fungsi kepada pengaturcara. Versi ini mempunyai tumpuan khusus pada keselamatan dan prestasi, dan salah satu ciri baharu yang perlu diberi perhatian ialah penambahan keupayaan pengesahan dan tandatangan. Dalam artikel ini, kita akan melihat dengan lebih dekat ciri baharu ini dan kegunaannya. Pengesahan dan tandatangan adalah konsep keselamatan yang sangat penting dalam sains komputer. Ia sering digunakan untuk memastikan bahawa data yang dihantar adalah lengkap dan sahih. Pengesahan dan tandatangan menjadi lebih penting apabila berurusan dengan transaksi dalam talian dan maklumat sensitif kerana jika seseorang dapat mengganggu data, ia berpotensi

Pengesahan menggunakan Google reCAPTCHA dalam PHP Pengesahan menggunakan Google reCAPTCHA dalam PHP Jun 19, 2023 pm 05:38 PM

Dalam dunia dalam talian moden, keselamatan laman web dan perlindungan privasi pengguna telah menjadi topik yang semakin penting. Antaranya, kaedah teknikal pengesahan mesin manusia telah menjadi salah satu cara yang sangat diperlukan untuk mencegah serangan berniat jahat. GooglereCAPTCHA ialah alat yang digunakan secara meluas untuk pengesahan manusia-komputer Konsepnya telah berakar umbi dalam hati orang ramai, malah kehadirannya boleh dilihat di banyak tapak web yang kami gunakan setiap hari. Dalam artikel ini, kami akan meneroka cara menggunakan GooglereCAPTCHA untuk pengesahan dalam PHP

Bagaimana untuk mengesahkan sama ada input adalah semua aksara Cina dalam golang Bagaimana untuk mengesahkan sama ada input adalah semua aksara Cina dalam golang Jun 24, 2023 am 09:16 AM

Dengan perkembangan zaman, kami memberi lebih banyak perhatian kepada pengesahan data, terutamanya pengesahan input pengguna. Untuk pengesahan bahasa, cara menentukan dengan tepat sama ada input adalah semua aksara Cina telah menjadi isu penting. Dalam golang, kita boleh menggunakan pakej unicode dan pakej regexp untuk mencapai keperluan ini. 1. Pakej Unicode Pakej unicode menyediakan satu siri sokongan teras untuk unicode. Kita boleh menggunakan fungsi dalam pakej ini untuk menentukan dengan tepat sama ada sesuatu aksara ialah aksara Cina.

See all articles