bhekor/laravel-geetest

Laravel的Geetest包

v1.0.1 2022-03-25 13:54 UTC

This package is auto-updated.

Last update: 2024-09-26 01:32:17 UTC


README

Build Status DUB Support Release

Bhekor开发的Laravel包,用于Geetest平台。它为Laravel提供了简单的Geetest使用方式。

Geetest演示:Geetest

安装

需要Laravel 7或更高版本。

此包现在支持Geetest 3.0。

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

$ composer require bhekor/laravel-geetest

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

"bhekor/laravel-geetest": "~1.0.0"

然后运行

composer update

您不必进行以下步骤,但如果需要。

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

Bhekor\LaravelGeetest\GeetestServiceProvider::class

您还可以在config/app.phpaliases中注册Geetest Facade

'Geetest' => Bhekor\LaravelGeetest\Geetest::class

配置

要开始,您需要使用以下命令发布供应商资产

php artisan vendor:publish --tag=laravel-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,我们不需要将这些键添加到Model中,因此您应该在Model中添加以下内容

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'
        ];
    }
}

我们可以在Controller中通过Request参数使用它

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

例如,如果您添加此路由

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

您需要将Bhekor\LaravelGeetest\GeetestCaptcha添加到您的AuthController

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非常受欢迎。

作者

Ibidapo Adeolu (Bhekor),来自尼日利亚

许可证

Laravel Geetest遵循MIT许可证(MIT)