1. 程式人生 > >php實現郵箱驗證

php實現郵箱驗證

一、Introduction

需求是使用者在註冊時填寫email,註冊後,需要到郵箱驗證後才能登陸。

二、實現

驗證流程,註冊成功後,為使用者生成一個驗證碼;將驗證碼以連線方式發到使用者郵箱;使用者點選連線將驗證碼發回網站;網站驗證這個驗證碼是否是為這個使用者生成的驗證碼;帳號需要在24小時內驗證,否則帳號失效。

1.        準備工作

需要新增phpMailer類來發郵件。下載phpMailer,然後解壓到專案根目錄下。

發郵件使用smtp協議,埠是25;收郵件,使用pop3協議,埠號是110。還需要一臺郵件伺服器。可以自己搭建,也可以使用第三方的。使用第三方的郵件伺服器需要在第三方註冊一個帳號。登陸開啟smtp協議。

在config.php中配置郵箱相關的資訊。

   'EMAIL' => array(

       'host' => 'smtp.163.com',

       'user' => 'youxiangzhanghao',

       'password' => 'password', //此處的密碼為user郵箱在開啟smtp時設定的授權密碼。     

),

2.        建立用於傳送郵件的公用方法

/**

 * 傳送郵件的方法

 */

functionsendMail($to, $title, $content)

{

         require_once('./PHPMailer-5.2.14/class.smtp.php');

         require_once('./PHPMailer-5.2.14/class.phpmailer.php');

         $mail = new PHPMailer();

         //設定為傳送郵件

         $mail->IsSMTP();

         //是否允許傳送html程式碼為郵件內容

         $mail->IsHTML(true);

         $mail->CharSet = 'utf-8';

         //是否需要身份驗證

         $mail->SMTPAuth = true;

         //郵件伺服器的帳號資訊

         $mailConfig = C('EMAIL');

         $mail->From =$mailConfig['user'].'@163.com';

         $mail->FromName =$mailConfig['user'];

         $mail->Host = $mailConfig['host'];

         $mail->Username = $mailConfig['user'];

         $mail->Password =$mailConfig['password'];

         //發郵件的埠號

         $mail->Port = 25;

         //收件人

         $mail->AddAddress($to);

         //郵件標題

         $mail->Subject = $title;

         //郵件內容

         $mail->Body = $content;

         return($mail->send());

}

在控制器的首頁方法中測試

//測試傳送郵件

var_dump(sendMail('[email protected]','phptestemail', '<a href="http://www.phptest.com">hahahah</a>'));

3.        修改會員表,新增email欄位和驗證碼欄位

email  varchar(150)  not  null comment  '郵箱',

email_chkcode  char(32)  not  null default  ''  comment  '郵箱驗證碼',

email_chkcode_time  int  unsigned  not  null comment  '郵箱驗證碼生成時間',

key  email_chkcode(email_chkcode)

4.        修改註冊,必須填email

修改登錄檔單,新增email欄位;修改member模型,允許插入email欄位,並增加email欄位為email的驗證規則。

5.        註冊之前生成email驗證碼

在_before_insert()方法中

                   //生成email驗證碼

                   $data['email_chkcode']= md5(uniqid());

                   $data['email_chkcode_time']= time();

6.        註冊之後將驗證碼發給使用者郵箱

         /**

          * 註冊後的鉤子函式

          */

         protected function _after_insert($data,$option)

         {

                   $content = "歡迎註冊,請點選以下完成驗證:<p><a href='http://www.php2.com/eshop/index.php/Home/Member/email_chk/code/{$data['email_chkcode']}'>請點選</a></p>";

                   sendMail($data['email'],'php2網站郵箱驗證', $content);

         }

7.        在member控制器新增方法完成驗證

    /**

     * 完成郵箱驗證方法

     */

    public function email_chk()

    {

        //接收驗證碼

        $code = I('get.code');

        //查詢這個驗證碼是否有效

        $member = D('Admin/Member');

        $info = $member->field('id,email_chkcode_time')->where(array(

            'email_chkcode' => $code,

        ))->find();

        if($info)

        {

            if((time() -$info['email_chkcode_time']) > 86400)

            {

                //帳號過期,刪除這個帳號

               $member->delete($info['id']);

                $this->error('驗證碼已過期,帳號已經刪除,請重新註冊', U('regist'));

                exit;

            }

            else

            {

                //驗證通過,將驗證碼清空

                $member->where(array(

                    'id' => $info['id'],

               ))->setFielf('email_chkcode', '');

                $this->success('驗證通過,請登陸', U('login'));

                exit;

            }

        }

        else

        {

            $this->error('引數錯誤', U('/'));

            exit;

        }

    }

8.        修改會員模型中的登陸方法

         //判斷這個帳號是否通過驗證碼驗證

         if(!empty($user['email_chkcode']))

         {

                   $this->error= '必須驗證後才可以登陸';

                   returnfalse;

         }

9.        修改註冊程式碼

如果一個帳號已經存在,但是過期沒有驗證,可以刪除這個帳號。

添加註冊時的表單驗證,為username和email新增關於唯一性和註冊驗證碼的驗證。

         array('email','chk_un_email', 'email已經存在!', 1,'callback', 3),

         array('username','chk_un_user', '使用者名稱已經存在!', 1,'callback', 3),

         //驗證已經存在的郵箱是否通過驗證

         public function chk_un_email()

         {

                   $email = I('post.email');

                   $username =I('post.username');

                   $hasEmail =$this->field('id,email_chkcode,email_chkcode_time')->where(array(

                            'email' =>$email,

                   ))->find();

                   if($hasEmail)

                   {

                            if(empty($hasEmail['email_chkcode']))

                            {

                                     returnfalse;

                            }

                            else

                            {

                                     if(time() -$hasEmail['email_chkcode_time'] > 86400)

                                     {

                                               $this->delete($hasEmail['id']);

                                               returntrue;

                                     }

                                     else

                                     {

                                               returnfalse;

                                     }

                            }

                   }

                   else

                   {

                            return true;

                   }

         }

         //驗證已經存在的使用者名稱是否通過驗證

         public function chk_un_user()

         {

                   $username =I('post.username');

                   $hasUsername =$this->field('id,email_chkcode,email_chkcode_time')->where(array(

                            'username' =>$username,

                   ))->find();

                   if($hasUsername)

                   {

                            if(empty($hasUsername['email_chkcode']))

                            {

                                     returnfalse;

                            }

                            else

                            {

                                     if(time() -$hasUsername['email_chkcode_time'] > 86400)

                                     {

                                               $this->delete($hasUsername['id']);

                                               returntrue;

                                     }

                                     else

                                     {

                                               returnfalse;

                                     }

                            }

                   }

                   else

                   {

                            return true;

                   }

         }

10.    測試

相關推薦

php實現郵箱驗證

一、Introduction需求是使用者在註冊時填寫email,註冊後,需要到郵箱驗證後才能登陸。二、實現驗證流程,註冊成功後,為使用者生成一個驗證碼;將驗證碼以連線方式發到使用者郵箱;使用者點選連線將驗證碼發回網站;網站驗證這個驗證碼是否是為這個使用者生成的驗證碼;帳號需要

JavaMail實現郵箱驗證

random 人員 app from 賬戶 net catch cap ttext   筆者最近在學習系統登錄使用的郵箱驗證碼的功能實現,下面給出使用JavaMail實現發送郵箱驗證碼的代碼。本代碼使用的是163的郵件服務器,可以根據需要更換別的服務器。 import j

php實現圖形驗證碼詳解!

最近由於專案需要,圖形驗證碼,就寫了一個,為大家詳細介紹下實現過程! 1、驗證碼封裝實現方法 //生成驗證碼 public function get_img_code(){ ob_clean(); cookie('code',NULL); session('code',NU

php實現簡訊驗證

 PHP實現簡訊驗證的整體思路:   一、申請簡訊api ->申請網址https://s1.chanyoo.cn/login?url=%2f  二、編寫核心程式碼(thinkPHP5) 示例: <?php//名稱空間namespace app

Java程式設計師從笨鳥到菜鳥(五十七) java 實現郵箱驗證

1、郵箱開啟服務 以 QQ 郵箱為例: 進入網頁郵箱 -> 設定 開啟之後會得到一個授權碼,待會配置需要這個授權碼 2、新增依賴 在 pom.xml 新增依賴 <dependency> <groupId>org.springf

使用nodejs實現郵箱驗證碼功能

       今天做了個小demo,是用nodejs實現註冊時(當然在別的地方也是可以用的)的郵箱驗證功能,大體就是往指定的郵箱傳送六位驗證碼。以下是詳細步驟。 1、使用模組:nodemailer  安裝:npm install nodemailer --save 2、

javaWeb實現郵箱驗證功能(二)

上篇寫的實現基本上是一個工具類,並沒封裝成下圖這樣方式(梨視訊註冊介面),現在開始完善上篇的java郵箱啟用驗證功。 java郵箱驗證地址:https://blog.csdn.net/BlackPlus28/article/details/85044068 -----------------

java實現郵箱驗證(一)

需求:使用者註冊時給郵箱傳送郵件,得到驗證碼並填寫,進行啟用郵箱。 有基礎的可以直接看下篇:https://blog.csdn.net/BlackPlus28/article/details/85114001 首先一步一步來寫,這篇是以java簡單的傳送郵件 一、設定發件人的郵箱和密碼等

jquery ajax+mysql+php實現資料庫驗證使用者名稱是否存在

   總共需要兩個頁面和一個名為test的資料庫,裡頭有一個名為bbs的表: nameExisit.php(使用者前端頁面當然也可以寫成html頁面) reg.php              (用於處理資料的後臺頁面) nameExisit.php <!DOCTYP

【實戰】Java實現郵箱驗證

Java實現郵箱驗證一、JavaMail1.什麼是JavaMail?    JavaMail,提供給開發者處理電子郵件相關的程式設計介面,它是sun釋出的用來處理email的API,它可以方便地執行一些常用的郵件傳輸。2.為什麼要學習JavaMail?    使用者註冊後,網

使用PHP實現身份驗證的集中方法

1、簡單身份驗證 可以使用MySQL來改進原有的身份驗證機制,將使用者名稱和密碼(以SHA-1雜湊演算法1加密)資料儲存在MySQL資料庫中; <?php /* 提供簡單的身份驗證機制的

使用Flask實現郵箱驗證啟用和使用者管理功能

Flask實現的功能: 使用者註冊增加郵箱驗證啟用功能 增加使用者管理功能(登入和登出) 目錄結構: 使用者註冊增加郵箱驗證啟用功能 1.user模型更新: # 生成賬戶啟用的token def generate_a

實現郵箱驗證功能的程式碼

package com.maxtech.util; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyEmailAutherti

Java實現郵箱驗證

(2)在AdminUserService中:@Service public class AdminUserService { @Autowired private AdminUserDao adminUserDao; @Autowired private AdminAuthD

如何實現郵箱驗證

實現郵箱驗證 首先需要藉助nodemailer往註冊郵箱傳送郵件。而通過nodemailer代理髮送需要先獲取授權碼 具體程式碼實現如下 var nodemailer = require('

PHP實現帶有驗證碼的登陸註冊

開發工具 Wampserver WampServer就是Windows下 Apache+Mysql+PHP整合安裝環境,即在window下的apache、php和mysql的伺服器軟體,通俗的說,就是它集成了php開發所需要的資料庫軟體,伺

java實現郵箱驗證QQ郵箱驗證和Foxmail驗證

這兩天公司要求做個Android端郵箱認證,android端還是很簡單的,主要難點在後臺連結郵箱併發送郵件。 思路:android端傳送郵箱地址給後臺,後臺獲取郵箱地址後,連結公司郵箱,併發送驗證碼郵件,並返回郵箱地址+驗證碼給Android端,And

PHP實現簡訊驗證

手機驗證碼流程: 獲取手機驗證碼事件:正則驗證手機號,將手機號碼和驗證碼作為引數非同步訪問手機驗證碼ajax頁面 手機驗證碼ajax頁面:驗證驗證碼,生成手機驗證碼,生成流水號,引用介面頁面傳送驗證碼,如果成功則將驗證碼資訊寫入資料庫 註冊按鈕事件:將手機號和手機驗證

Java實現郵箱發送驗證

int res intern 服務 char ati aging err con 第一步,導入JAR包,JAR包下載地址[http://pan.baidu.com/s/1kVRvGyF] 正式代碼:   首先書寫一個工具類:   MailUtil import

php正則驗證手機、郵箱

als href 驗證 clas private hone net 電話 span //驗證電話private function reg_phone($phone){ if (preg_match("/^13[0-9]{1}[0-9]{8}$|15[0189]