risentang/lumen-captcha

为lumen设计的captcha

v1.0 2018-12-17 08:32 UTC

This package is auto-updated.

Last update: 2024-09-17 21:28:55 UTC


README

本项目基于 Captcha for Laravel 5 进行修改。

注:非常感谢 aishan/lumen-captcha 提供的无状态缓存版接口验证码,但由于 lumen5.3 中的内核与 lumen5.5 的内核有不同,所以本人经过修改调试,弄出支持 lumen5.5 的无状态缓存版接口验证码。

预览效果图

Preview

安装

  • 项目必须启用缓存才能使用,因为验证码和验证码绑定的 uuid 都保存在缓存中。请查看项目的 composer.json 文件。
composer require risentang/lumen-captcha

{
    "require": {
        "laravel/lumen-framework": "5.5.*",
        "risentang/lumen-captcha": "^1.0"
    },
    "minimum-stability": "dev"
}

使用

bootstrap/app.php 中注册 Captcha Service Provider:

    //验证码
    $app->register(Risentang\LumenCaptcha\CaptchaServiceProvider::class);
    class_alias('Risentang\LumenCaptcha\Facades\Captcha','Captcha');

配置

bootstrap/app.php 中可以配置各种自定义类型的验证码属性:更多详细配置请查看https://github.com/mewebstudio/captcha

/**
 * captcha配置
 */
config(['captcha'=>
    [
        'useful_time'=>5,//验证码有效时间,单位(分钟)
        'captcha_characters'=>'2346789abcdefghjmnpqrtuxyzABCDEFGHJMNPQRTUXYZ',
        'sensitive' =>false,//验证码大小写是否敏感
        'login'   => [//登陆验证码样式
            'length'    => 4,//验证码字数
            'width'     => 120,//图片宽度
            'height'    => 36,//字体大小和图片高度
            'angle'    => 10,//验证码中字体倾斜度
            'lines'    => 2,//生成横线条数
            'quality'   => 90,//品质
            'invert'    =>false,//反相
            'bgImage'   =>true,//是否有背景图
            'bgColor'   =>'#ffffff',
            'blur'   =>0,//模糊度
            'sharpen'   =>0,//锐化
            'contrast'   =>0,//反差
            'fontColors'=>['#339900','#ff3300','#9966ff','#3333ff'],//字体颜色
        ],
    ]
]);

当然,也可以不配置,默认就是 default 的样式,验证码有效时间 5 分钟。

使用范例

因为 lumen 一般写的都是无状态的 API,所以此处验证码的图片必须绑定一个 uuid,获取图片验证码时,先获取验证码 url 地址和 uuid,然后在验证时,提交验证码和 uuid 一并验证码。

生成验证码

获取验证码信息:

{站点域名}/captchaInfo/{type?}

其中 type 就是在配置文件中定义的验证码类型(如果你定义了的话),当然也可以不指定 type,则默认为 default,返回信息:

{
  "code": "10000",
  "msg": "success",
  "sub_code": "",
  "sub_msg": "",
  "result": {
    "captchaUrl": "{站点域名}/captcha/default/fc1d7d7f-3d8c-652a-5e92-90e9822740ad",
    "captchaUuid": "fc1d7d7f-3d8c-652a-5e92-90e9822740ad"
  }
}

captchaUrl 为验证码图片地址,captchaUuid 为绑定验证码图片的 uuid。

验证验证码

在请求中将验证码的值和 uuid 随着你的 post 请求一起发到服务端,在接收参数的地方做验证即可:

public function checkCaptcha(Request $request, $type = 'default',$captchaUuid)
    {
        $this->validate($request,[
            'captcha'=>'required|captcha:'.$captchaUuid
        ]);
        ...
    }

链接