vadimtrunov/laravel8-geetest

Laravel 的 Geetest 包

3.1.2 2022-02-22 09:40 UTC

README

Build Status DUB Support Release

Laravel Geetest 是由 Germey 开发的 Laravel 5 的 Geetest 包。它为 Laravel 提供了简单的 Geetest 使用方式。

Geetest 示例: Geetest

安装

需要 Laravel 5.0 或更高版本。

此包现在支持 Geetest 3.0。

对于 Geetest 2.0,请参阅 LaravelGeetest 2.0

要获取 Laravel Geetest 的最新版本,只需使用 Composer 引入项目

$ composer require germey/geetest

或者,您可以将以下内容添加到 composer.json 文件中的 require

"germey/geetest": "~3.0"

然后运行

$ composer update

接下来,您需要注册服务提供者。打开 config/app.php 文件,并将以下内容添加到 providers

Germey\Geetest\GeetestServiceProvider::class

您还可以在 config/app.phpaliases 中注册 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 中注册。创建一个应用并获取 IDKEY

例如。您可以在将应用添加到 Geetest 管理页面 后看到应用 IDKEY

然后,在您的 .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 来定义警报文本

您还可以使用 Request 来实现验证

<?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或更高版本)中添加额外的路由。并且您需要在控制器中添加一个trait。

例如,如果您添加以下路由

Route::get('auth/geetest','Auth\AuthController@getGeetest');

您需要在您的AuthController中添加Germey\Geetest\GeetestCaptcha

use Germey\Geetest\GeetestCaptcha;
class AuthController extends Controller {
    use GeetestCaptcha;
}

然后Ajax URL配置成功。

您也可以在其他控制器中使用此Trait,但需要在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_alertserver_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

或者直接向此存储库发送pull request。

pull request非常受欢迎。

作者

Germey,来自中国北京

许可证

Laravel Geetest遵循MIT许可证 (MIT)