天天看點

Laravel8內建 Geetest 極驗驗證碼

簡述

之前項目使用的行為驗證一直是Geetest,但是最近更新了Laravel 架構8版本,發現之前的Geetest內建包無法使用了,安裝composer 包 會報錯說版本不支援8以上的版本,經過苦苦尋找發現了一個大佬內建的composer包,經測試可以使用。 位址:https://packagist.org/packages/zbrettonye/geetest  建議閱讀原項目的 README 檔案。 下面簡單介紹一下該工具包的使用。

注冊極驗賬号

首先需要到 極驗 網站新增賬號,然後建立一個應用,擷取到 ID 和 KEY,留作備用,背景管理頁面如下。

Laravel8內建 Geetest 極驗驗證碼
Laravel8內建 Geetest 極驗驗證碼

安裝

在項目位址輸入指令

composer require zbrettonye/geetest           

就可以完成該包的安裝 或者可以在 composer.json 的 require 中添加

"zbrettonye/geetest": "^1.2"           

然後執行

composer update           

同樣可以完成該包的安裝。

配置

注冊 ServiceProvider,在 config/app.php 的 providers 中添加  ( 注:laravel6以後無需再自行配置ServiceProvider,架構會自動加載 )

然後執行

php artisan vendor:publish           

會生成一個配置檔案,config/geetest.php 和視圖檔案 views/vendor/geetest,視圖檔案中你可以自定義配置,比如修改一下驗證失敗後的一些前端操作等。

使用

首先把剛才拿到的 ID 和 KEY 配置到 .env 檔案中,因為這兩個算私密内容,配置到 .env 檔案中可以保證安全性。在 .env 中寫入如下兩行。

GEETEST_ID=0f1097bef7xxxxxx9afdeced970c63e4
GEETEST_KEY=c070f0628xxxxxxe68e138b55c56fb3b           

然後,在任意的視圖裡,我們隻需要調用

{!! Geetest::render() !!}           

如下:

<form action="/" method="post">
    <input name="_token" type="hidden" value="{{ csrf_token() }}">
    <input type="text" name="name" placeholder="name">
    {!! Geetest::render() !!}
    <input type="submit" value="submit">
</form>
           

效果如下:

Laravel8內建 Geetest 極驗驗證碼
Laravel8內建 Geetest 極驗驗證碼
Laravel8內建 Geetest 極驗驗證碼

服務端驗證

同樣你也可以自己自行發揮了。

use Illuminate\Http\Request;

class BaseController extends Controller 
{
  /**
   * @param Request $request
   */
  public function postValidate(Request $request)
  {
    $result = $this->validate($request, [
      'geetest_challenge' => 'geetest',
    ], [
      'geetest' => config('geetest.server_fail_alert')
    ]);
    if ($request) {
      return 'success';
    }
  }
}           

常見問題

php報錯cURL error 60: SSL certificate problem: unable to get local issuer certifica

Laravel8內建 Geetest 極驗驗證碼
Laravel8內建 Geetest 極驗驗證碼

這是因為沒有配置信任的伺服器HTTPS驗證。預設情況下,cURL被設為不信任任何CAs,是以浏覽器無法通過HTTPs通路你伺服器。

解決方法:下載下傳一個CA憑證 cacert.pem

下載下傳網址:https://curl.haxx.se/docs/caextract.html

Laravel8內建 Geetest 極驗驗證碼

将下載下傳好的檔案放到網站目錄下,打開php.ini配置檔案,找到以下代碼

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
; curl.cainfo = 
           

将curl.cainfo前面的;去掉,改成cacert.pem的絕對路徑即可。

下一篇: caffe 筆記