国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP郵箱驗證示例教程

2024-05-04 23:46:59
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了PHP郵箱驗證示例,通過實例一步步帶領大家認識PHP郵箱驗證的過程,感興趣的小伙伴們可以參考一下
 

在用戶注冊中最常見的安全驗證之一就是郵箱驗證。根據行業的一般做法,進行郵箱驗證是避免潛在的安全隱患一種非常重要的做法,現在就讓我們來討論一下這些最佳實踐,來看看如何在PHP中創建一個郵箱驗證。

讓我們先從一個注冊表單開始:

<form method="post" action="http://mydomain.com/registration/"> <fieldset class="form-group"> <label for="fname">First Name:</label> <input type="text" name="fname" class="form-control" required />  </fieldset>  <fieldset class="form-group"> <label for="lname">Last Name:</label> <input type="text" name="lname" class="form-control" required />  </fieldset>  <fieldset class="form-group"> <label for="email">Last name:</label> <input type="email" name="email" class="form-control" required />  </fieldset>  <fieldset class="form-group"> <label for="password">Password:</label> <input type="password" name="password" class="form-control" required />  </fieldset>  <fieldset class="form-group"> <label for="cpassword">Confirm Password:</label> <input type="password" name="cpassword" class="form-control" required />  </fieldset>  <fieldset>    <button type="submit" class="btn">Register</button>  </fieldset></form> 

接下來是數據庫的表結構:

CREATE TABLE IF NOT EXISTS `user` ( `id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, `fname` VARCHAR(255) , `lname` VARCHAR(255) , `email` VARCHAR(50) , `password` VARCHAR(50) , `is_active` INT(1) DEFAULT '0', `verify_token` VARCHAR(255) , `created_at` TIMESTAMP, `updated_at` TIMESTAMP,); 

一旦這個表單被提交了,我們就需要驗證用戶的輸入并且創建一個新用戶:

// Validation rules$rules = array(  'fname' => 'required|max:255',  'lname' => 'required|max:255', 'email' => 'required', 'password' => 'required|min:6|max:20', 'cpassword' => 'same:password');$validator = Validator::make(Input::all(), $rules);// If input not valid, go back to registration pageif($validator->fails()) { return Redirect::to('registration')->with('error', $validator->messages()->first())->withInput();}$user = new User();$user->fname = Input::get('fname');$user->lname = Input::get('lname');$user->password = Input::get('password');// You will generate the verification code here and save it to the database// Save user to the databaseif(!$user->save()) { // If unable to write to database for any reason, show the error return Redirect::to('registration')->with('error', 'Unable to write to database at this time. Please try again later.')->withInput();}// User is created and saved to database// Verification e-mail will be sent here// Go back to registration page and show the success messagereturn Redirect::to('registration')->with('success', 'You have successfully created an account. The verification link has been sent to e-mail address you have provided. Please click on that link to activate your account.');

 注冊之后,用戶的賬戶仍然是無效的直到用戶的郵箱被驗證。此功能確認用戶是輸入電子郵件地址的所有者,并有助于防止垃圾郵件以及未經授權的電子郵件使用和信息泄露。

 整個流程是非常簡單的——當一個新用戶被創建時,在注冊過過程中,一封包含驗證鏈接的郵件便會被發送到用戶填寫的郵箱地址中。在用戶點擊郵箱驗證鏈接和確認郵箱地址之前,用戶是不能進行登錄和使用網站應用的。

 關于驗證的鏈接有幾件事情是需要注意的。驗證的鏈接需要包含一個隨機生成的token,這個token應該足夠長并且只在一段時間段內是有效的,這樣做的方法是為了防止網絡攻擊。同時,郵箱驗證中也需要包含用戶的唯一標識,這樣就可以避免那些攻擊多用戶的潛在危險。

現在讓我們來看看在實踐中如何生成一個驗證鏈接:

// We will generate a random 32 alphanumeric string// It is almost impossible to brute-force this key space$code = str_random(32);$user->confirmation_code = $code; 

一旦這個驗證被創建就把他存儲到數據庫中,發送給用戶:

Mail::send('emails.email-confirmation', array('code' => $code, 'id' => $user->id), function($message){$message->from('my@domain.com', 'Mydomain.com')->to($user->email, $user->fname . ' ' . $user->lname)->subject('Mydomain.com: E-mail confirmation');}); 

郵箱驗證的內容:

<!DOCTYPE html><html lang="en-US"> <head> <meta charset="utf-8" /> </head> <body> <p style="margin:0">  Please confirm your e-mail address by clicking the following link:  <a href="http://mydomain.com/verify?code=<?php echo $code; ?>&user=<?php echo $id; ?>"></a> </p> </body></html> 

現在讓我們來驗證一下它是否可行:

$user = User::where('id', '=', Input::get('user'))  ->where('is_active', '=', 0)  ->where('verify_token', '=', Input::get('code'))  ->where('created_at', '>=', time() - (86400 * 2))  ->first();if($user) { $user->verify_token = null; $user->is_active = 1; if(!$user->save()) { // If unable to write to database for any reason, show the error return Redirect::to('verify')->with('error', 'Unable to connect to database at this time. Please try again later.'); } // Show the success message return Redirect::to('verify')->with('success', 'You account is now active. Thank you.');}// Code not valid, show error messagereturn Redirect::to('verify')->with('error', 'Verification code not valid.'); 

結論:
上面展示的代碼只是一個教程示例,并且沒有通過足夠的測試。在你的web應用中使用的時候請先測試一下。上面的代碼是在Laravel框架中完成的,但是你可以很輕松的把它遷移到其他的PHP框架中。同時,驗證鏈接的有效時間為48小時,之后就過期。引入一個工作隊列就可以很好的及時處理那些已經過期的驗證鏈接。

本文實PHPChina原創翻譯,原文轉載于http://www.phpchina.com/portal.php?mod=view&aid=39888,小編認為這篇文章很具有學習的價值,分享給大家,希望對大家的學習有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 五峰| 菏泽市| 盈江县| 宝兴县| 深水埗区| 循化| 含山县| 枞阳县| 高阳县| 清新县| 科技| 徐闻县| 惠水县| 化德县| 宜春市| 都江堰市| 财经| 汉源县| 嫩江县| 伊春市| 宜兰县| 夹江县| 姜堰市| 房产| 修水县| 泸西县| 临清市| 务川| 依安县| 福海县| 阿尔山市| 谷城县| 清镇市| 郁南县| 奉贤区| 新平| 临武县| 连南| 积石山| 平陆县| 邯郸市|