Laravel的驗(yàn)證碼庫(kù)gregwar/captcha

原創(chuàng)作品茫打,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明原始出處椎组、作者信息和本聲明然眼,否則后果自負(fù)培廓。
如果你覺(jué)得這篇文章對(duì)你有幫助或啟發(fā)卦睹,可直接留言和我溝通**

案例展示

在Laravel中有很多圖片驗(yàn)證碼的庫(kù)可以使用越妈,本篇介紹其中之一:gregwar/captcha泪勒,這個(gè)庫(kù)比較簡(jiǎn)單跌前,在Laravel中比較常用棕兼。下面我們就來(lái)介紹下使用細(xì)節(jié):


首先, composer.json中如下加入配置:


"require": {
        ...
        "gregwar/captcha": "1.*"
    },

然后,已成習(xí)慣的命令:

composer update

接下來(lái)就可以正常使用了抵乓,根據(jù)具體的開(kāi)發(fā)需求伴挚,可以有很多種方式去使用。

  • 可以將驗(yàn)證碼圖片保存文件:
<?php

$builder->save('out.jpg');
  • 可以直接輸出圖片到網(wǎng)頁(yè):
<?php

header('Content-type: image/jpeg');
$builder->output();
  • 可以生成內(nèi)聯(lián)圖片:
<img src="<?php echo $builder->inline(); ?>" />

以下演示了其中一種使用方式灾炭,直接輸出圖片到網(wǎng)頁(yè)茎芋。

我定義了一個(gè)Controller:

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

//引用對(duì)應(yīng)的命名空間
use Gregwar\Captcha\CaptchaBuilder;
use Session;

class KitController extends Controller {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function captcha($tmp)
    {
                //生成驗(yàn)證碼圖片的Builder對(duì)象,配置相應(yīng)屬性
        $builder = new CaptchaBuilder;
        //可以設(shè)置圖片寬高及字體
        $builder->build($width = 100, $height = 40, $font = null);
        //獲取驗(yàn)證碼的內(nèi)容
        $phrase = $builder->getPhrase();

        //把內(nèi)容存入session
        Session::flash('milkcaptcha', $phrase);
        //生成圖片
        header("Cache-Control: no-cache, must-revalidate");
        header('Content-Type: image/jpeg');
        $builder->output();
    }

}

下面我們可以設(shè)置相應(yīng)的router訪問(wèn)這個(gè)驗(yàn)證碼圖片, 修改router.php:

Route::get('kit/captcha/{tmp}', 'KitController@captcha');

現(xiàn)在可以通過(guò)具體的url咆贬,可以訪問(wèn)看到這張圖片了

驗(yàn)證碼

表單內(nèi)部寫(xiě)的比較簡(jiǎn)單败徊,看看即可:

<input type="text" name="captcha" class="form-control" style="width: 300px;">
          <a onclick="javascript:re_captcha();" ><img src="{{ URL('kit/captcha/1') }}"  alt="驗(yàn)證碼" title="刷新圖片" width="100" height="40" id="c2c98f0de5a04167a9e427d883690ff6" border="0"></a>

<script>  
  function re_captcha() {
    $url = "{{ URL('kit/captcha') }}";
        $url = $url + "/" + Math.random();
        document.getElementById('c2c98f0de5a04167a9e427d883690ff6').src=$url;
  }
</script>

最后就是在form提交頁(yè)面驗(yàn)證相應(yīng)驗(yàn)證碼,庫(kù)中也為我們提供了相應(yīng)方法:

$userInput = $request->get('captcha');

if($builder->testPhrase($userInput)) {
    //用戶(hù)輸入驗(yàn)證碼正確
    return '您輸入驗(yàn)證碼正確';
} else {
    //用戶(hù)輸入驗(yàn)證碼錯(cuò)誤
    return '您輸入驗(yàn)證碼錯(cuò)誤';
}

至此掏缎,驗(yàn)證碼就完成了皱蹦。 如有疑問(wèn),歡迎回復(fù)探討眷蜈。

補(bǔ)充

在form表單提交驗(yàn)證的代碼寫(xiě)的比較草率沪哺,給讀者帶來(lái)了歧義,在此有個(gè)補(bǔ)充(感謝 一塊黃布 的回復(fù)):
$builder->testPhrase($userInput) 這里的$builder與生成驗(yàn)證碼的$builder為同一個(gè)酌儒,如果重新new辜妓,則一直會(huì)驗(yàn)證失敗。我們可以從源碼中看到:

public function testPhrase($phrase)

 {

 return ($this->builder->niceize($phrase) == $this->builder->niceize($this->getPhrase()));

 }

驗(yàn)證碼正確性判斷忌怎,也可以由下列方式來(lái)驗(yàn)證:

$userInput = \Request::get('captcha');

if (Session::get('milkcaptcha') == $userInput) {
    //用戶(hù)輸入驗(yàn)證碼正確
    return '您輸入驗(yàn)證碼正確';
} else {
    //用戶(hù)輸入驗(yàn)證碼錯(cuò)誤
    return '您輸入驗(yàn)證碼錯(cuò)誤';
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末籍滴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榴啸,更是在濱河造成了極大的恐慌孽惰,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸥印,死亡現(xiàn)場(chǎng)離奇詭異勋功,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)库说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)狂鞋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人潜的,你說(shuō)我怎么就攤上這事骚揍。” “怎么了啰挪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵疏咐,是天一觀的道長(zhǎng)纤掸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)浑塞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任政己,我火速辦了婚禮酌壕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歇由。我一直安慰自己卵牍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布沦泌。 她就那樣靜靜地躺著糊昙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谢谦。 梳的紋絲不亂的頭發(fā)上释牺,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音回挽,去河邊找鬼没咙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛千劈,可吹牛的內(nèi)容都是我干的祭刚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼墙牌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涡驮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起喜滨,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捉捅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鸿市,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锯梁,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年焰情,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陌凳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡内舟,死狀恐怖合敦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情验游,我是刑警寧澤充岛,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布保檐,位于F島的核電站,受9級(jí)特大地震影響崔梗,放射性物質(zhì)發(fā)生泄漏夜只。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一蒜魄、第九天 我趴在偏房一處隱蔽的房頂上張望扔亥。 院中可真熱鬧,春花似錦谈为、人聲如沸旅挤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)粘茄。三九已至,卻和暖如春秕脓,著一層夾襖步出監(jiān)牢的瞬間柒瓣,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工撒会, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘹朗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓诵肛,卻偏偏與公主長(zhǎng)得像屹培,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怔檩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容