簡述
之前項目使用的行為驗證一直是Geetest,但是最近更新了Laravel 架構8版本,發現之前的Geetest內建包無法使用了,安裝composer 包 會報錯說版本不支援8以上的版本,經過苦苦尋找發現了一個大佬內建的composer包,經測試可以使用。 位址:https://packagist.org/packages/zbrettonye/geetest 建議閱讀原項目的 README 檔案。 下面簡單介紹一下該工具包的使用。
注冊極驗賬号
首先需要到 極驗 網站新增賬號,然後建立一個應用,擷取到 ID 和 KEY,留作備用,背景管理頁面如下。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL61EVOJTW65EeNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1QjN5UDOxATM5IjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
安裝
在項目位址輸入指令
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>
效果如下:
服務端驗證
同樣你也可以自己自行發揮了。
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
這是因為沒有配置信任的伺服器HTTPS驗證。預設情況下,cURL被設為不信任任何CAs,是以浏覽器無法通過HTTPs通路你伺服器。
解決方法:下載下傳一個CA憑證 cacert.pem
下載下傳網址:https://curl.haxx.se/docs/caextract.html
将下載下傳好的檔案放到網站目錄下,打開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的絕對路徑即可。