fractal512/captcha

非常简单的 Laravel 5 无状态验证码包。

v1.0.1 2021-02-04 19:08 UTC

This package is auto-updated.

Last update: 2024-09-21 01:37:27 UTC


README

为 Laravel 5+ 提供一个非常简单的无状态验证码。基本上,这是一个简单的 Laravel 包,用于包裹我多年前编写的旧验证码脚本。

安装

您可以通过在项目的 composer.json 中要求 fractal512/captcha 包并设置 minimum-stabilitydev(Laravel 5 所需)来通过 Composer 安装验证码。

{
    "require": {
        "laravel/framework": "5.0.*",
        "fractal512/captcha": "^1.0"
    },
    "minimum-stability": "dev"
}

然后使用 composer update 更新您的包或使用 composer install 安装。

或者使用 composer 安装此包

composer require fractal512/captcha

在 Windows 上,您需要在 php.ini 中包含 GD2 DLL php_gd2.dll。您还需要包含 php_fileinfo.dllphp_mbstring.dll 来满足 fractal512/captcha 依赖项的要求。

Laravel 注册

在具有自动发现功能(Laravel 5.5+)的版本中不需要。在 config/app.phpproviders 键中注册 Captcha Service Provider。

    'providers' => [
        // ...
        'Fractal512\Captcha\CaptchaServiceProvider',
    ]

针对 Laravel 5.1+

    'providers' => [
        // ...
        Fractal512\Captcha\CaptchaServiceProvider::class,
    ]

config/app.phpaliases 键中注册验证码包的 facade。

    'aliases' => [
        // ...
        'Captcha' => 'Fractal512\Captcha\Facades\Captcha',
    ]

针对 Laravel 5.1+

    'aliases' => [
        // ...
        'Captcha' => Fractal512\Captcha\Facades\Captcha::class,
    ]

配置

发布包的 config.php 文件以应用自己的设置。

$ php artisan vendor:publish --provider="Fractal512\Captcha\CaptchaServiceProvider" --tag="config"

或者(Laravel 8+)

$ php artisan vendor:publish

然后输入 Fractal512\Captcha\CaptchaServiceProvider 服务提供者的编号。

config/captcha.php 文件的内容

return [
    'characters' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
    'expire' => 300,
    'attempts' => 10,
    'default' => [],
    'numbers' => [
        'characters' => '0123456789'
    ],
    'letters' => [
        'characters' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ],
    'uppercase' => [
        'characters' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ],
    'lowercase' => [
        'characters' => 'abcdefghijklmnopqrstuvwxyz'
    ]
];

配置选项

  • characters - 用于验证码的字符集(可用的预设:defaultnumberslettersuppercaselowercase);
  • expire - 验证码过期时间(秒);
  • attempts - 每分钟刷新验证码图像的尝试次数。

可以包含其他选项

  • fontsDirectory - 自定义字体目录的完全限定路径(不带尾部斜杠);
  • fontFile - 位于 fontsDirectory 中的自定义 TTF 字体文件名;
  • captchaDirectory - 存储验证码文件的目录的完全限定路径(不带尾部斜杠)。

使用示例

    // base_path() . "/routes/web.php"
    Route::any('captcha-example', function() {
        if (request()->getMethod() == 'POST') {
            $rules = ['captcha' => 'required|captcha'];
            $validator = validator()->make(request()->all(), $rules);
            if ($validator->fails()) {
                echo '<p style="color: #ff0000;">Verification failed!</p>';
            } else {
                echo '<p style="color: #00ff00;">Verification passed!</p>';
            }
        }
    
        $form = '<form method="post" action="">';
        $form .= '<input type="hidden" name="_token" value="' . csrf_token() . '">';
        $form .= '<p>';
        $form .= captcha_img('default', ['id' => 'captcha-img']);
        $form .= '<a href="#" onclick="document.getElementById(\'captcha-img\').src = \'/captcha/default?\' + Date.now()">Refresh</a>';
        $form .= '</p>';
        $form .= '<p><input type="text" name="captcha"></p>';
        $form .= '<p><button type="submit" name="check">Check captcha</button></p>';
        $form .= '</form>';
        return $form;
    });

辅助函数和 Facade

返回图片

captcha();

或使用 facade

Captcha::create();

返回 URL

captcha_src();

或使用 facade

Captcha::src('default');

返回 HTML

captcha_img();

或使用 facade

Captcha::img();

要使用其他配置

captcha_img('numbers');

Captcha::img('uppercase');

等等。

链接