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]