前言:
驗證碼是我們互聯(lián)網(wǎng)生活中非常常見的一個事物,我們開發(fā)人員也經(jīng)常會寫,沒有驗證碼的系統(tǒng)是不安全的.我們平時使用ThinkPHP框架來開發(fā),框架為我們準(zhǔn)備了驗證碼的組件,今天我們來看看如何使用tp5的驗證碼
目錄:
- 驗證碼的呈現(xiàn)
- 驗證碼的刷新
- 驗證碼的驗證
1.驗證碼的呈現(xiàn)
首先我們tp5框架并沒有直接封裝驗證碼,我們需要composer來引入這個擴(kuò)展組件.
//命令為
composer require topthink/think-captcha
引入之后,我們的擴(kuò)展目錄中就會出現(xiàn)我們安裝的驗證碼擴(kuò)展目錄
在使用驗證碼之前,我們可以通過手冊發(fā)現(xiàn)驗證碼有哪些配置
這些配置有幾種配置方式
- 創(chuàng)建驗證碼對象時,將配置數(shù)組傳入
$config = [
// 驗證碼字體大小
'fontSize' => 30,
// 驗證碼位數(shù)
'length' => 3,
// 關(guān)閉驗證碼雜點(diǎn)
'useNoise' => false,
];
$captcha = new Captcha($config);
- 在config.php中,直接以captcha命名的配置中直接配置
因為一個站點(diǎn)通常使用一種驗證碼,所有推薦大家使用第二種方式
配置好了,我們就可以來使用它了,首先我們需要寫一個html頁面
簡單寫個登陸頁面,這我就多說了
我們直接說驗證碼的顯示
- 寫一個img標(biāo)簽,在src中賦值
< img src="{:captcha_src()}" id="captcha" alt="看不清楚點(diǎn)擊換圖">
- 直接使用封裝好的captcha_img()方法來顯示圖片
<div>{:captcha_img()}</div>
這兩種方式都可以輸出一張驗證碼,但我們考慮到要刷新驗證碼,我們選擇操作空間更大的第一種方式
然后控制器渲染視圖,我就不詳細(xì)講了.
我們就可以得到一個有驗證碼的頁面
2. 驗證碼刷新
生活中我們肯定會遇到驗證碼模糊看不清楚的時候,這時站點(diǎn)一般都會提供一個點(diǎn)擊刷新的按鈕來刷新驗證碼.
我們首先找到驗證碼的img 的src
找到這個url之后,我們就可以想辦法讓它刷新了,根據(jù)以往的經(jīng)驗,在驗證碼的src后面加上一個隨機(jī)數(shù)就可以讓驗證碼刷新
那么下面我們就來寫JavaScrip代碼
//我們在一個按鈕中設(shè)置了點(diǎn)擊事件
$(function () {
$("#refresh").click(function () {
//我們選擇通過時間撮來當(dāng)作我們的隨機(jī)數(shù)
var time=Date.parse(new Date());
//將時間戳加入到url地址的路由中
$("#captcha").attr('src','/captcha.html?id='+time);
})
})
這樣我們每次點(diǎn)擊按鈕就會生成新的驗證碼了
3. 驗證碼的驗證
既然有了驗證碼,我們就得驗證它。我們對驗證碼驗證主要是有兩個驗證忍抽,一個就是是否輸入驗證碼因妇,一個是驗證碼輸入是否正確。
tp5中的驗證碼和其他的驗證一樣找蜜,有多種驗證方式饼暑,本次介紹的是開發(fā)團(tuán)隊比較推薦的驗證器類來實現(xiàn)。
首先洗做,我們需要一個驗證器類
好了我們寫好了驗證類后撵孤,就應(yīng)該調(diào)用驗證了
首先我們需要實例化驗證器規(guī)則
//實例化驗證器對象
$validate=Loader::validate('驗證器類名');
現(xiàn)在我們就獲取到了驗證器對象,我們只需要調(diào)用對象中的驗證方法check()就可以驗證了
/**
* 數(shù)據(jù)自動驗證
* @access public
* @param array $data 數(shù)據(jù)
* @param mixed $rules 驗證規(guī)則
* @param string $scene 驗證場景
* @return bool
*/
public function check($data, $rules = [], $scene = '')
當(dāng)我們不傳入驗證規(guī)則時竭望,他會讀取對象上的rule屬性邪码,也就是我們之前寫好的驗證規(guī)則。如果驗證失敗的話咬清,check()方法返回false
這時候闭专,我們只需要調(diào)用驗證器對象上的getError()方法就可以得到提示信息了
//實例化驗證器對象
$validate=Loader::validate('User');
if (!$validate->check($data)) {
dump($validate->getError());exit;
}
好了,本次tp5驗證碼的介紹了就寫到這里了,如果有什么地方不對,希望大神指正.謝謝
以上