bkstar123/laravel-recaptcha

Google reCaptcha v2 复选框 & v3 验证

1.1.4 2019-09-28 11:40 UTC

This package is auto-updated.

Last update: 2024-09-28 23:13:08 UTC


README

本包添加了 reCaptcha_v2 复选框和 reCaptcha_v3 验证。两种版本的 reCaptcha 可以一起使用

1.需求

建议使用 PHP 版本 7.1.3+ 和 Laravel 框架版本 5.5+ 来安装此包

2.安装

composer require bkstar123/laravel-recaptcha 

对于 reCaptcha_v2 复选框,在 .env 文件中添加以下设置
GOOGLE_RECAPTCHA_KEY=<你的 google-recaptcha-v2-key>
GOOGLE_RECAPTCHA_SECRET=<你的 google-recaptcha-v2-secret>

对于 reCaptcha_v3,在 .env 文件中添加以下设置
GOOGLE_RECAPTCHA3_KEY=<你的 google-recaptcha-v3-key>
GOOGLE_RECAPTCHA3_SECRET=<你的 google-recaptcha-v3-secret>
GOOGLE_RECAPTCHA3_THRESHOLD=<你期望的分数来判断这是否是人类>(可选,默认设置为 0.5)

3. reCaptcha v2 复选框的使用方法

3.1 在 Blade 视图中

你可以通过调用 {{ Recaptcha::addClient() }} 将 Google reCaptcha v2 验证添加到你的网站

注意Recaptcha 别名已自动注册,因此你不需要在 config/app.php 中添加它

以下输入将自动添加到你的视图中,并在验证逻辑中进行验证

<textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response"></textarea>

你还可以按以下方式将验证结果显示在视图中(使用 CSS 样式突出显示验证错误)

<div class="form-group{{ $errors->has('g-recaptcha-response') ? ' has-error' : '' }}">
    <div class="col-md-12">
        {{ Recaptcha::addClient() }}
        @if ($errors->has('g-recaptcha-response'))
            <span class="help-block">
                <strong>{{ $errors->first('g-recaptcha-response') }}</strong>
            </span>
        @endif
    </div>
</div>

3.2 在验证逻辑中

你可以使用一个名为 recaptcha 的新自定义验证规则,针对 g-recaptcha-response 属性进行验证,例如

$request->validate([
    'g-recaptcha-response' => 'required|recaptcha'
], [
    'g-recaptcha-response.recaptcha' => 'Please make sure you are not a robot',
    'g-recaptcha-response.required' => 'Re-captcha field is required'
]);

4. reCaptcha v3 的使用方法

4.1 在 Blade 视图中

首先,你需要调用 addClient3Html() 方法在 Recaptcha 门面中,例如

{{ Recaptcha::addClient3Html('recaptcha3') }}

此调用将创建如下隐藏输入

<input type="hidden" name="recaptcha3" id="recaptcha3">

你可以通过添加以下片段来显示验证错误

@if ($errors->has('recaptcha3'))
    <span class="help-block">
        <strong>{{ $errors->first('recaptcha3') }}</strong>
    </span>
@endif

其次,你需要调用 addClient3Js() 方法在 Recaptcha 门面中,例如

{{ Recaptcha::addClient3Js('<action_name>', 'recaptcha3') }} 

此调用将创建如下 JavaScript 块

<script>
    grecaptcha.ready(function() {
        grecaptcha.execute('<SITE-KEY>', {action: '<action_name>'})
                  .then(function (token) {
                    if (token) {
                        document.getElementById('recaptcha3').value = token;
                    }
                  });
    });
</script>

4.2 在验证逻辑中

你可以使用一个名为 recaptcha_v3 的新自定义验证规则,针对 recaptcha3 属性进行验证,例如

$request->validate([
    'recaptcha3' => 'recaptcha_v3'
], ['recaptcha_v3' => 'You are not a human']);

注意:

  • 只要包含 a-z,A-Z 和 _,你可以为 action_name 给任意名称
  • 此外,对于属性名称,你可以使用除了 recaptcha3 以外的任意字符串