kuttumiah/recaptcha

Laravel 5 的 reCAPTCHA 验证器

3.0.4 2021-04-15 15:50 UTC

README

Laravel 5 的 reCAPTCHA 验证器。

这是对 reCaptcha 包 的分支版本,功能相同,但支持 reCaptcha 版本 3。

(寻找 Laravel 4 版本?拉取最新的 1.x 标签。对于 Laravel 5.0,拉取最新的 2.0 标签。)

要支持 reCaptcha v3,请从该存储库使用 dev-master

安装

将以下行添加到 composer.jsonrequire 部分

{
    "require": {
        "kuttumiah/recaptcha": "dev-master",
    }
}

或者在终端中运行以下命令

$ composer require "kuttumiah/recaptcha:dev-master"

设置

  1. 如果您正在使用 Laravel 5.5+ 并使用包自动发现,可以跳过此步骤。对于旧版本或已禁用包自动发现的情况,请继续此步骤。

    /config/app.php 中,将以下内容添加到 providers

    Kuttumiah\Recaptcha\RecaptchaServiceProvider::class,

    并添加以下内容到 aliases

    'Recaptcha' => Kuttumiah\Recaptcha\Facades\Recaptcha::class,
  2. 运行 php artisan vendor:publish --provider="Kuttumiah\Recaptcha\RecaptchaServiceProvider"

  3. /config/recaptcha.php 中,输入您的 reCAPTCHA 公钥和私钥。

    • 如果您不是使用最新版本的 reCAPTCHA,请将 version 设置为 2 或 1。
    • 如果您正在升级到 reCAPTCHA 的 v3 版本,请注意,您之前的版本中的密钥将不再有效,您需要在 reCAPTCHA 管理员 中生成一组新的密钥。
  4. 该包附带默认验证消息,但如果您想自定义它,请将以下行添加到 resources/lang/[lang]/validation.php

        'recaptcha' => 'The :attribute field is not correct.',

greggilbert/recaptcha 包迁移

  1. /config/app.php 中,从 providers 中删除以下内容

    Greggilbert\Recaptcha\RecaptchaServiceProvider::class,

    并从 aliases 中删除以下内容

    'Recaptcha' => Greggilbert\Recaptcha\Facades\Recaptcha::class,
  2. composer.jsonrequire 部分删除以下行

    {
        "require": {
            "greggilbert/recaptcha": "dev-master",
        }
    }
  3. 在终端中运行以下命令

    $ composer update
  4. 遵循安装设置步骤。

注意:如果在迁移过程中遇到任何错误,请检查故障排除部分。

使用方法

v2 (无验证码)

  1. 在您的表单中使用 {!! Recaptcha::render() !!} 来输出标记。
  2. 在您的验证规则中添加以下内容
    $rules = [
        // ...
        'g-recaptcha-response' => 'required|recaptcha',
    ];

v1 (旧版)

  1. 在您的表单中使用 {!! Recaptcha::render() !!} 来输出标记。
  2. 在您的验证规则中添加以下内容
    $rules = [
        // ...
        'recaptcha_response_field' => 'required|recaptcha',
    ];

也建议在验证时添加 required

自定义

reCAPTCHA v2 允许通过一系列选项自定义小部件,这些选项在官方文档中列出。您可以通过以下六个允许的键配置验证码的输出:themetypelangcallbacktabindexexpired-callback

在配置文件中,您可以创建一个 options 数组来设置默认行为。例如

    // ...
    'options' => [
		'lang' => 'ja',
	],

将所有 reCAPTCHAs 的语言默认设置为日语。如果您想进一步自定义,您可以通过 render 选项传递选项

echo Recaptcha::render([ 'lang' => 'fr' ]);

传递给 Recaptcha::render 的选项将始终覆盖配置。

语言

要更改验证码的语言,只需将语言作为选项的一部分传递

    'options' => [
        'lang' => 'fr',
	],

有关有效语言代码的列表,请参阅官方文档

自定义模板

或者,如果您想设置默认模板而不是标准模板,可以使用配置

    // ...
    'template' => 'customCaptcha',

或者您可以通过表单选项传递它

echo Recaptcha::render([ 'template' => 'customCaptcha' ]);

故障排除

在迁移到 greggilbert/recaptcha 包时,你可能会遇到以下错误

> @php artisan package:discover

在 ProviderRepository.php 文件的第 208 行

    找不到类 'Greggilbert\Recaptcha\RecaptchaServiceProvider'

处理 post-autoload-dump 事件的脚本 @php artisan package:discover 返回了错误代码 1

为了解决这个问题,我在 Stack Overflow 上找到了一个有用的资源,可以修复这个问题。为了方便,我将解决方案附在这里。

前往你的 项目 > bootstrap > cache > config.php 文件。手动从缓存数组中删除提供者和别名。

或者简单地删除该文件,并通过运行以下命令重新生成:

$ php artisan config:cache

v1 定制

关于 v1 定制选项,请参阅 旧版文档 并相应地应用。

限制

由于 Google 显示 reCAPTCHA 的方式,如果从 AJAX 调用中加载表单,此包将无法工作。如果你需要这样做,你应该使用 Google 提供的 替代方法之一