cyber-duck/silverstripe-recaptcha

为 SilverStripe 提供标准 reCAPTCHA 和隐形 reCAPTCHA 表单字段

安装次数: 3,791

依赖关系: 0

建议者: 0

安全性: 0

星标: 4

关注者: 4

分支: 4

类型:silverstripe-vendormodule

4.1 2022-10-04 21:29 UTC

This package is auto-updated.

Last update: 2024-09-08 12:37:46 UTC


README

为 SilverStripe 提供标准 reCAPTCHA 和隐形 reCAPTCHA 表单字段

Latest Stable Version Latest Unstable Version Total Downloads License

作者: Andrew Mc Cormack

适用于 SilverStripe 4.*

安装

将以下内容添加到您的 composer.json 文件中,并运行 /dev/build?flush=all

{  
    "require": {  
        "cyber-duck/silverstripe-recaptcha": "4.0.*"
    }
}

标准 Recaptcha

添加 2 个 .env 变量,包含您的 recaptcha 密钥

RECAPTCHA_SITE_KEY="0000000000"
RECAPTCHA_SECRET_KEY="0000000000"

将字段添加到您的网站上的任何表单中,就像添加任何其他字段一样。传入

  • 字段名称。同时将字段添加到必填字段列表中。
use CyberDuck\Recaptcha\Forms\RecaptchaField;

$fields = FieldList::create([
	RecaptchaField::create('Recaptcha');
]);

$validator = RequiredFields::create([
    'Recaptcha'
]);

隐形 Recaptcha

添加 2 个 .env 变量,包含您的 recaptcha 密钥

RECAPTCHA_INVISIBLE_SITE_KEY="0000000000"
RECAPTCHA_INVISIBLE_SECRET_KEY="0000000000"

将字段添加到您的网站上的任何表单中,就像添加任何其他字段一样。传入

  • 字段名称,
  • 表单 ID(不带 #)
  • HTML 元素 ID(不带 #)或选择器(如按钮)以渲染 reCAPTCHA 小部件。同时将字段添加到必填字段列表中。
use CyberDuck\Recaptcha\Forms\InvisibleRecaptchaField;

$fields = FieldList::create([
	InvisibleRecaptchaField::create(
	    'Recaptcha', 
	    'MemberLoginForm_LoginForm',
	    'MemberLoginForm_LoginForm_action_doLogin'
	);
]);

$validator = RequiredFields::create([
    'Recaptcha'
]);

与 jQuery 和 AJAX 一起工作

如果您想使用 AJAX 与 reCAPTCHA 一起使用,可以将模块模板文件夹中的 InvisibleRecaptcha.ss 复制到您的主题模板文件夹中

<script type="text/javascript">
    var onRecaptchaFormSubmit = function(token) {
        document.getElementById('{$FormID}').submit();
    };
    var onloadCallback = function() {
        grecaptcha.render('{$Container}', {
        'sitekey' : '{$SiteKey}',
        'callback' : onRecaptchaFormSubmit
        });
    };
</script>

然后只需更新 onRecaptchaFormSubmit 函数以使用 jQuery 选择并提交表单

<script type="text/javascript">
    var onRecaptchaFormSubmit = function(token) {
        $('#{$FormID}').submit();
    };
    var onloadCallback = function() {
        grecaptcha.render('{$Container}', {
        'sitekey' : '{$SiteKey}',
        'callback' : onRecaptchaFormSubmit
        });
    };
</script>

在您的 AJAX 成功函数中,如果您的表单验证失败,您可以通过调用 onloadCallback() 来重新渲染 reCAPTCHA

onloadCallback()