风屏极验 / geetest
Laravel8 的 Geetest 包
Requires
- php: ^7.3
- illuminate/routing: ^5.5 || ^6 || ^7
- illuminate/support: ^5.5 || ^6 || ^7
Requires (Dev)
- mockery/mockery: ^1.4
- phpunit/phpunit: ^9.0
README
Laravel Geetest 是由 Germey 开发的适用于 Laravel 5-8 的包。它为 Laravel 提供了简单易用的 Geetest。
Geetest 示例: Geetest
安装
需要 Laravel 5.0 或更高版本。
此包现在支持 Geetest 3.0。
对于 Geetest 2.0,请参阅 LaravelGeetest 2.0
要获取 Laravel Geetest 的最新版本,只需使用 Composer 引入项目
$ composer require fengbingji/geetest
或者,您可以将以下内容添加到 composer.json 中的 require 键
"fengbingji/geetest": "~3.0"
然后运行
$ composer update
接下来,您需要注册服务提供者。打开 config/app.php 并将以下内容添加到 providers 键
Germey\Geetest\GeetestServiceProvider::class
并且您可以在 config/app.php 的 aliases 中注册 Geetest Facade
'Geetest' => Germey\Geetest\Geetest::class
配置
要开始使用,您需要使用以下命令发布供应商资源
$ php artisan vendor:publish --tag=geetest
这将创建一个名为 config/geetest.php 的配置文件,您可以按需配置 geetest。
它还会生成一个名为 resources/views/vendor/geetest 的视图文件夹,其中包含一个名为 geetest.blade.php 的视图文件。在这里您可以配置 geetest 的样式。例如,您可以更改脚本 alert()。
用法
首先,您需要在 Geetest 中注册。创建一个应用并获取 ID 和 KEY。
例如,您可以在添加应用后,在 Geetest 管理页面 中看到应用的 ID 和 KEY。
然后,在您的 .env 文件中配置它们,因为您最好不要将它们公开。
将它们添加到 .env 中如下所示
GEETEST_ID=0f1097bef7xxxxxx9afdeced970c63e4
GEETEST_KEY=c070f0628xxxxxxe68e138b55c56fb3b
然后,您可以在视图中使用 render() 如下,它将渲染一个 geetest 验证码
{!! Geetest::render() !!}
例如,您可以在 form 中使用它如下
<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>
渲染结果如下
当您点击 submit 按钮时,它将验证 Geetest 验证码。如果没有完成验证,它将弹出一个文本框并阻止表单提交。
或者您可以为 Geetest 设置其他样式
{!! Geetest::render('float') !!}
{!! Geetest::render('bind') !!}
{!! Geetest::render('popup') !!}
{!! Geetest::render('custom') !!}
然后它将在网站中以嵌入或弹出方式显示。默认为 float。
如果验证完成,表单将成功提交。
服务器验证
为什么 Geetest 是安全的?如果它只有前端的客户端验证,我们能否说它是完整的?它还有服务器验证来确保 POST 请求已验证。
首先,必须说明的是,您只能使用前端的 Geetest。但是您也可以做一些简单的事情来实现服务器验证。
您可以使用 $this->validate() 方法来实现服务器验证。以下是一个示例
use Illuminate\Http\Request; class BaseController extends Controller { /** * @param Request $request */ public function postValidate(Request $request) { $this->validate($request, [ 'geetest_challenge' => 'geetest', ], [ 'geetest' => config('geetest.server_fail_alert') ]); return true; } }
如果我们使用 Geetest,表单将发送三个额外的参数 geetest_challenge geetest_validate geetest_seccode。Geetest 使用这三个参数来实现服务器验证。
如果您使用 ORM,我们不需要将这些键添加到模型中,因此您应该在模型中添加以下内容
protected $guarded = ['geetest_challenge', 'geetest_validate', 'geetest_seccode'];
您可以通过修改 config/geetest.php 中的 server_fail_alert 来定义警报文本。
您还可以使用请求来实现验证。
<?php namespace App\Http\Requests; use App\Http\Requests\Request; class ValidationRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'geetest_challenge' => 'geetest' ]; } /** * Get validation messages. * * @return array */ public function messages() { return [ 'geetest' => 'Validation Failed' ]; } }
我们可以在控制器中通过请求参数使用它。
use Illuminate\Support\Facades\Config; use Illuminate\Http\Request; use App\Http\Requests\ValidationRequest; class BaseController extends Controller { /** * @param Request $request */ public function postValidate(ValidationRequest $request) { // is Validate } }
选项
更改 Ajax Url
如果您想更改 Geetest Ajax Url,您可以在 config/geetest.php 中进行配置,根据需要更改 url,但在此期间您需要在您的 routes.php(Laravel 5.2 或更早版本)或 routes/web.php(Laravel 5.3 或更高版本)中添加额外的路由。并且您需要在控制器中添加一个路由。
例如,如果您添加了此路由
Route::get('auth/geetest','Auth\AuthController@getGeetest');
您需要在您的 AuthController 中添加 Germey\Geetest\GeetestCaptcha
use Germey\Geetest\GeetestCaptcha; class AuthController extends Controller { use GeetestCaptcha; }
然后配置 Ajax url 成功。
您还可以在其他控制器中使用此特性,但需要在 config/geetest.php 中配置 url。
在渲染时配置 Url
此外,您还可以通过以下方式设置 Geetest Ajax Url
{!! Geetest::setGeetestUrl('/auth/geetest')->render() !!}
通过 setGeetestUrl 方法您可以设置 Geetest Ajax Url。如果已配置,它将覆盖 config/geetest.php 中配置的 url。
配置警报消息
您可以通过在 config/geetest.php 中配置 client_fail_alert 和 server_fail_alert 来配置警报消息。
配置语言
Geetest 支持不同的语言
- 简体中文
- 繁体中文
- 英语
- 日语
- 韩语
您可以在 config/geetest.php 中进行配置。
以下是语言配置的关键值
- zh-cn (简体中文)
- zh-tw (繁体中文)
- en (英语)
- ja (日语)
- ko (韩语)
例如,如果您想使用韩语,只需将 lang 键更改为 ko
'lang' => 'ko'
配置协议
您可以在 config/geetest.php 中配置协议。
例如,如果您想使用 https,只需将 protocol 键更改为 https
'protocol' => 'https'
配置默认产品
您可以在 config/geetest.php 中配置默认产品。
例如,如果您想使用弹出式产品,只需将 product 键更改为 popup
'product' => 'popup'
请注意,它仅在您使用这种方式时才有效
{!! Geetest::render() !!}
如果您使用这种方式
{!! Geetest::render('bind') !!}
它将覆盖 config/geetest.php 中的配置。
贡献
如果您发现此包存在问题,您可以发送电子邮件到 cqc@cuiqingcai.com
或者直接向此存储库发送拉取请求。
拉取请求非常受欢迎。
作者
Germey,来自中国北京
许可
Laravel Geetest 在 MIT 许可证 (MIT) 下授权。