ThinkPHP6:验证码

Posted 时光-ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP6:验证码相关的知识,希望对你有一定的参考价值。

问题描述: 缺少验证码

解决:
1、首先使用 Composer 安装 think-captcha 扩展包:

composer require topthink/think-captcha


(注:验证码库需要开启Session才能生效。)

2、配置: 在config下的captcha中。

<?php
// +----------------------------------------------------------------------
// | Captcha配置文件
// +----------------------------------------------------------------------

return [
    //验证码位数
    'length'   => 5,
    // 验证码字符集合
    'codeSet'  => '23456789abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
    // 验证码过期时间
    'expire'   => 1800,
    // 是否使用中文验证码
    'useZh'    => false,
    // 是否使用算术验证码
    'math'     => false,
    // 是否使用背景图
    'useImgBg' => false,
    //验证码字符大小
    'fontSize' => 25,
    // 是否使用混淆曲线
    'useCurve' => true,
    //是否添加杂点
    'useNoise' => true,
    // 验证码字体 不设置则随机
    'fontttf'  => '',
    //背景颜色
    'bg'       => [243, 251, 254],
    // 验证码图片高度
    'imageH'   => 0,
    // 验证码图片宽度
    'imageW'   => 0,

    // 添加额外的验证码设置
    // verify => [
    //     'length'=>4,
    //    ...
    //],
];


3、(middleware.php)启动session,因为验证码信息是以缓存形式存储在session中的

4、(前)模板中的两种表示

<div>{:captcha_img()}</div>
<div><img src="{:captcha_src()}" alt="captcha" /></div>

上面两种的最终效果是一样的,根据需要调用即可。

5、(后)Login控制器

<?php
namespace app\\dongadmin\\controller;
use think\\facade\\Db;
use app\\BaseController;
class Login extends  BaseController
{
    //后台登录的逻辑
	public function index()
    {
        //已登录直接跳转
        $account = session('adminAccount');
        if($account && $account['id']) {
            return redirect(url('index/index'));
        }
        if(request()->isPost()) {
            $data = input('post.');
            //halt($data);
            // 通过用户名 获取 用户相关信息
            $adminData = Db::name('admin')->where('username',$data['username'])->find();//一维数组
            if(!$adminData || $adminData['status'] !=1 ) {
                //dump(111111);die;
                return alert('用户不存在,或者此用户未被审核通过','/dongadmin/login',5,3);
            }
            if(!captcha_check($data['verifycode'])) {
                //dump(222222);die;
                // 校验失败
                return alert('验证码不正确','/dongadmin/login',5,3);
            }
            if($adminData['password'] !=password_salt($data['password'])) {
                //dump(333333);die;
                return alert('密码不正确','/dongadmin/login',5,3);
            }
            //dump(444444);die;
            session('adminAccount', $adminData);
            return alert('登录成功!','/dongadmin/index/index',6,3);
        }else {
            return view();
        }
    }
}

以上是关于ThinkPHP6:验证码的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp 验证码怎么输出

如何解决thinkphp5中验证码常见问题

11 验证器《ThinkPHP6 入门到电商实战》

11 验证器《ThinkPHP6 入门到电商实战》

php生成各种验证码

thinkphp5 跨域验证码