美文网首页
TP6----验证码

TP6----验证码

作者: JuMinggniMuJ | 来源:发表于2020-09-08 11:31 被阅读0次

tp6的验证码是通过password_hash加密,通过session存储的一个验证方式

1.开启session:

tp5的session是默认开启的,但是tp6却不是,如果我们上来直接使用验证码,那么无论如何是验证不成功的,所以我们首先需要开启session才能使用验证码这个功能。

1.打开app目录下的middleware.php
2.取消\think\middleware\SessionInit::class的注释
2.下载验证码:

tp6默认是没有think-captcha扩展的,需要我们手动下载使用

composer require topthink/think-captcha

默认会下载下来最新的版本,我用的验证码版本是v3.0.3

3.修改验证码配置:

使用composer下载下来的验证码扩展会自动在config文件夹下为我们生成captcha.php文件,我们只需要修改相应的配置即可:

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

配置完验证码之后我们就可以在页面中使用验证码,文档中验证码有两种使用方式:

1.直接生成验证码的图片html:
        {:captcha_img()}
2.生成验证码的图片地址:
        <img src="{:captcha_src()}" />

个人建议使用第二种,可以随意的更改验证码的样式,而第一种修改起来比较麻烦

5.验证验证码:

我们需要在控制器中接收页面传来的验证码

$captcha = input('captcha');
if( !captcha_check($captcha )){
    return '验证码错误';
}else{
      return '验证码正确';
}
6.页面点击刷新功能:

有的时候我们看不清验证码中的信息,就需要我们做一个点击刷新验证码的功能,其实captcha扩展中已经给了我们建议写法:

/**
 * @param $config
 * @return string
 */
function captcha_src($config = null): string{
    return Route::buildUrl('/captcha' . ($config ? "/{$config}" : ''));
}
/**
 * @param $id
 * @return string
 */
function captcha_img($id = '', $domid = ''): string{
    $src = captcha_src($id);
    $domid = empty($domid) ? $domid : "id='" . $domid . "'";
    return "<img src='{$src}' alt='captcha' " . $domid . " onclick='this.src=\"{$src}?\"+Math.random();' />";
}

我们只需要在页面中给验证码图片添加一个点击事件:

<img src="{:captcha_src()}" onclick="this.src = this.src + '?a='+Math.random()" />
7.验证码是怎么验证的:

我们在验证验证码是否正确的时候只需要在控制器中调用captcha_check方法,但是到底是怎么验证的呐?

1.captcha_check方法(think-captcha/src/helper.php)
        function captcha_check($value){
            return Captcha::check($value);
        }
        1.1.它只是静态调用了一下Captcha类中的check方法
2.check方法(think-captcha/src/Captcha.php)
        public function check(string $code): bool{
            if (!$this->session->has('captcha')) {
            return false;
            }
            $key = $this->session->get('captcha.key');
            $code = mb_strtolower($code, 'UTF-8');
            $res = password_verify($code, $key);
            if ($res) {
                $this->session->delete('captcha');
            }
            return $res;
        }
        2.1首先判断session中是否有验证码信息,没有直接返回false
        2.2如果存在获取缓存中的验证码信息
        2.3将我们输入的验证码全部转化为小写
        2.4使用password_verify函数校验验证码
        2.5如果校验成功删除session中的验证码信息
8.至此tp6中使用验证码测试完成

相关文章

  • TP6----验证码

    tp6的验证码是通过password_hash加密,通过session存储的一个验证方式 1.开启session:...

  • Python实现自动登录,强行突破图形验证码!

    验证码有图形验证码、极验滑动验证码、点触验证码、宫格验证码。这回重点讲讲图形验证码的识别。 虽说图形验证码最简单,...

  • 利用Python识别图形验证码!实现自动登录!室友惊讶的合不拢嘴

    验证码有图形验证码、极验滑动验证码、点触验证码、宫格验证码。这回重点讲讲图形验证码的识别。 虽说图形验证码最简单,...

  • Python识别图形验证码,实现自动登陆(附视频教程)

    验证码有图形验证码、极验滑动验证码、点触验证码、宫格验证码。这回重点讲讲图形验证码的识别。 虽说图形验证码最简单,...

  • 谈谈短信验证码机制

    前言 现在市面上有多种验证码类型,例如图形验证码、滑动验证码、语音验证码、智力答题验证码等类型,短信验证码因其操作...

  • 谈谈短信验证码机制的理解

    前言 现在市面上有多种验证码类型,例如图形验证码、滑动验证码、语音验证码、智力答题验证码等类型,短信验证码因其操作...

  • TP6----门面类Facade

    从tp5.1开始就引入了门面的概念,在使用门面的时候我们就可以不再首先需要new一个对象实例了,代码看起来更加的简...

  • TP6----多语言

    当做国际项目的时候,避免不了一个多语言功能,tp6多语言功能核心类是Lang类和一个LoadLangPack中间件...

  • 12 字符验证码

    12 字符验证码 一、验证码简介 什么是验证码? 验证码(CAPTCHA)是“Completely Automat...

  • 关于验证码的思考(1.26)

    主流验证码分为三大类,图形验证码、手机验证码、手机语音验证码,它们各自设计初衷如下: 01图形验证码 它有着...

网友评论

      本文标题:TP6----验证码

      本文链接:https://www.haomeiwen.com/subject/hssdektx.html