inimist/cakephp-captcha

CakePHP Captcha 插件,支持图片、数学和 Google Recaptcha

安装: 469

依赖者: 1

建议者: 0

安全性: 0

星标: 4

关注者: 3

分支: 4

开放问题: 0

类型:cakephp-plugin

1.3 2019-11-13 10:12 UTC

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

实现

  1. 加载 Captcha 插件。

    如果您已经运行了 bin/cake plugin load Captcha -b -r,请跳过此步骤。

    在您的应用程序的 Application.phpbootstrap.php 文件中放置 Plugin::load('Captcha');

  2. 加载 Capthca 组件

    在控制器的 initialize 函数中放置 $this->loadComponent('Captcha.Captcha');

    或者

    在特定控制器的 action 函数中动态加载 Captcha 组件。例如在 signup() 动作中

    $this->loadComponent('Captcha.Captcha'); //或动态加载!$

  3. 将行为添加到您的模型/表中

    在您的 Model(表类)中放置 $this->addBehavior('Captcha.Captcha', ['field'=>'<fieldname>']) 注意:如果您使用 Google Recaptcha,请添加“secret”选项及其值,该值您可以从 Google 获取。同时,在视图文件中添加 Google 站点密钥。

  4. 在您的视图的 form 中创建一个输入字段

    echo $this->Captcha->create('<fieldname>', $options);

  5. 在处理表单数据的控制器中放置(对于图片和数学验证码是必需的)

    $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" 时必需)

已知问题

  1. 标题已发送问题。组件使用 PHP 的 header() 函数来发送或生成作为原始 HTML 输出的验证码图像。请确保在组件中的 create() 函数之前没有生成任何输出。在您的文件中存在空格、标签或空格的情况是常见的错误,这会导致验证码中不显示图像。

  2. GD 库 和 True Type 字体 (TTF) 支持扩展已在 PHP 中启用。

  3. 此验证码脚本使用三种随机字体,匿名RobotoUbuntu,来生成验证码图像中的字体。这些字体位于此下载的 captcha/src/Lib/Fonts 中。我发现有时这些字体文件在下载过程中会损坏。如果在错误日志中看到字体未找到错误并且验证码无法生成,请尝试从各自的来源下载这些字体,并在提到的文件夹中替换它们。您还可以通过在 Fonts 文件夹中放置不同的字体家族并在 CaptchaComponent.php 组件文件中引用它们来使用不同的字体族。