inimist / cakephp-captcha
CakePHP Captcha 插件,支持图片、数学和 Google Recaptcha
Requires
- php: ^5.6|^7.0
- cakephp/cakephp: ^3.6.0
This package is auto-updated.
Last update: 2024-09-10 15:23:34 UTC
README
使用图片验证码、数学验证码和 Google-recaptcha 来检测机器人,适用于 CakePHP 3
为什么使用这个插件?
- 在网页表单中显示 Google Recaptcha / 图片验证码 / 数学挑战
此 CakePHP Captcha 插件需要 CakePHP 3.6+。
快速功能
- 无需自定义代码。
- 快速安装。只需在每个控制器、模型和视图中添加 3 行代码。
- 作为模型验证使用。
- 单页面上可以有多个验证码。
- 提供多个演示。
- 演示作为 CakePHP 插件提供。
安装
composer require inimist/cakephp-captcha
然后
bin/cake plugin load Captcha -b -r
实现
-
加载 Captcha 插件。
如果您已经运行了
bin/cake plugin load Captcha -b -r
,请跳过此步骤。在您的应用程序的 Application.php 或 bootstrap.php 文件中放置
Plugin::load('Captcha');
。 -
加载 Capthca 组件
在控制器的 initialize 函数中放置
$this->loadComponent('Captcha.Captcha');
。或者
在特定控制器的 action 函数中动态加载 Captcha 组件。例如在 signup() 动作中
$this->loadComponent('Captcha.Captcha'); //或动态加载!
$ -
将行为添加到您的模型/表中
在您的 Model(表类)中放置
$this->addBehavior('Captcha.Captcha', ['field'=>'<fieldname>'])
注意:如果您使用 Google Recaptcha,请添加“secret”选项及其值,该值您可以从 Google 获取。同时,在视图文件中添加 Google 站点密钥。 -
在您的视图的 form 中创建一个输入字段
echo $this->Captcha->create('<fieldname>', $options);
-
在处理表单数据的控制器中放置(对于图片和数学验证码是必需的)
$this->Users->setCaptcha('<fieldname>', $this->Captcha->getCode('<fieldname>'));
在修补实体之前。例如
$this->Users->setCaptcha('securitycode', $this->Captcha->getCode('securitycode')); $user = $this->Users->patchEntity($user, $this->request->data);
一个完整的演示可以在这里找到。您可以从这里安装一个完整的演示插件。
设置
设置的最佳位置是您的_apps/config/app.php 文件。创建一个名为 "Captcha" 的新键,并指定设置。
'Captcha' => [
'type' => 'recaptcha',
'sitekey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
//'clabel' => 'Enter code',
//'reload_txt' => 'Reload??'
]
更多示例
选项
$options['width']=150;
$options['height']=50;
$options['theme']='default';
echo $this->Captcha->create('captcha_input_field_name', $options);
同一页面上有多个验证码
//form 1
$options1['width']=150;
$options1['height']=50;
echo $this->Captcha->create('captcha_input_field_name1', $options1);
//form 2, A math captcha, anywhere on the page
$options2['type']='math';
echo $this->Captcha->create('captcha_input_field_name2', $custom2);
视图模板的选项。例如:$this->Captcha->create('field_name', $options)
- field: 字段名(可选。默认 "captcha")
- type: recaptcha/image/math(可选:默认 "image")
- width: 图片验证码的宽度(可选。仅适用于类型 "image")
- height: 图片验证码的高度(可选。仅适用于类型 "image")
- theme: 默认/随机图片验证码颜色模式(可选。仅适用于类型 "image";默认 "default")
- length: 图片验证码中的字符数(可选。仅适用于类型 "image")
- angle: 图片验证码中字符的旋转角度(可选。仅适用于类型 "image")
- fontAdjustment: 图片验证码的字体大小(可选。仅适用于类型 "image")
- reload_txt: 重新加载验证码文本(可选)
- clabel: 图片验证码字段的标签(可选)
- mlabel: 数学验证码字段的标签(可选)
- sitekey: Google Recaptcha 站点密钥(必需。仅适用于类型 "recatpcha")
(所有上述选项也可以从控制器设置。例如:$this->loadComponent('Captcha.Captcha', $options)
)
**模型选项示例:$this->addBehavior('Captcha.Captcha', $options);
- 字段:字段名称(可选:默认 "captcha")
- 密钥:Google reCAPTCHA 密钥(类型为 "recaptcha" 时必需)
已知问题
-
标题已发送问题。组件使用 PHP 的
header()
函数来发送或生成作为原始 HTML 输出的验证码图像。请确保在组件中的 create() 函数之前没有生成任何输出。在您的文件中存在空格、标签或空格的情况是常见的错误,这会导致验证码中不显示图像。 -
GD 库 和 True Type 字体 (TTF) 支持扩展已在 PHP 中启用。
-
此验证码脚本使用三种随机字体,匿名、Roboto 和 Ubuntu,来生成验证码图像中的字体。这些字体位于此下载的 captcha/src/Lib/Fonts 中。我发现有时这些字体文件在下载过程中会损坏。如果在错误日志中看到字体未找到错误并且验证码无法生成,请尝试从各自的来源下载这些字体,并在提到的文件夹中替换它们。您还可以通过在 Fonts 文件夹中放置不同的字体家族并在 CaptchaComponent.php 组件文件中引用它们来使用不同的字体族。