labcat / recaptcha
提供了一个表单字段,允许表单通过向用户挑战解密图像来验证非机器人提交。
Requires
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-09-29 05:35:40 UTC
README
简介
提供了一个 FormField,允许表单使用谷歌的 reCAPTCHA v2 服务来验证非机器人提交。
为了使用谷歌的新 Invisible reCAPTCHA 服务,请使用 undefinedoffset/silverstripe-nocaptcha 模块。此模块不建议与 reCAPTCHA v3 (见 rationale)一起使用。
要求
- SilverStripe 框架 4.0 或更高版本
- curl PHP 模块
- 需要 spamprotection 模块
安装
composer require labcat/recaptcha
- 运行 ?flush=1
这应该放在您的 mysite/_config/recaptcha.yml
中。您可以在 https://www.google.com/recaptcha 获取免费的 API 密钥。
SilverStripe\Recaptcha\RecaptchaField:
public_api_key: "your-site-key"
private_api_key: "your-secret-key"
如果您的网站需要代理服务器来处理出站流量,则可以在您的 mysite/_config/recaptcha.yml
中设置以下附加选项。
proxy_server: "proxy_address"
proxy_auth: "username:password"
要使用 noscript 回退方法,请在您的 yml 中添加键 noscript_enabled: true
。
要更改语言,请将其添加到 yml 中的选项数组。
options:
hl: NL
theme: dark
type: audio
size: compact
有关所有可用参数的详细信息,请参阅 https://developers.google.com/recaptcha/docs/display#render_param。
用法
作为独立字段
如果您想单独使用 reCAPTCHA 字段,您只需将其作为表单中的一个字段包含即可。
$recaptchaField = new RecaptchaField('MyCaptcha');
$recaptchaField->options = array('theme' => 'light'); // optional
有关更多配置选项,请参阅 reCAPTCHA 文档。
与 spamprotection 模块的集成
这需要安装 spamprotection 模块,有关详细信息,请参阅其文档。您可以使用此字段保护您网站上任何构建的表单,包括 [[:modules:blog]] 模块中的用户评论。
mysite/_config/spamprotection.yml
中的配置示例
---
name: spamprotection
---
SilverStripe\SpamProtection\Extension\FormSpamProtectionExtension:
default_spam_protector: SilverStripe\Recaptcha\RecaptchaProtector
然后,一旦您设置了此配置,您需要按照 spamprotection 页面上的说明包括垃圾邮件保护字段。
已知问题
页面文档类型 XHTML 的问题
reCAPTCHA 当前在页面文档类型为 XHTML 时无法正常工作。API 返回的 JavaScript 使用 "document.write",这在 XHTML 中不受支持。一种解决方案是始终使用模块的 no-script 版本(修改 RecaptchaField.php 中的相关行),或将网页的文档类型切换到 HTML 4。见:https://w3schools.org.cn/tags/tag_DOCTYPE.asp