PHP code example of ajiho / think-captcha
1. Go to this page and download the library: Download ajiho/think-captcha library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ajiho / think-captcha example snippets
return [
//随机因子(已排除容易混淆的1和iI、0和oO)
'charset' => 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789',
//验证码长度
'codelen' => '4',
//宽度
'width' => '150',
//高度
'height' => '50',
//字体大小
'fontsize' => '20',
];
//new验证码对象
$captcha = new \ajiho\Captcha();
//这里大家可以根据情况选择存储方式,这里用session做演示
session('captcha', $captcha->getCode());
//输出图片
return $captcha->outImg();
//接受参数
$captcha = input('captcha','');
//判断表单传递过来的验证码和上面存到session中的验证码是否一致
if ($captcha !== session('captcha')) {
//验证码不正确
}
//如果你不想区分大小写,可以统一都转换为小写再对比
//if (strtolower($captcha) !== strtolower(session('captcha'))) {
//验证通过
//session('captcha', null); //验证通过后根据需要 是否要删除存在session的验证码
//该路由是用于验证码显示
Route::get('captcha/:uniqid', 'Captcha/show');
//验证码接口
Route::get('captcha', 'Captcha/create');
//登录处理
Route::post('login', 'Login/login');
//验证码唯一标识
$uniqid = uniqid((string)mt_rand(100000, 999999));
//说明:这里生成的链接其实就是指向验证码显示方法
$src = (string)\think\facade\Route::buildUrl('/captcha/' . $uniqid)->domain(true);
$data = [
'src' => $src,
'uniqid' => $uniqid,
];
//这里你们可以根据自己封装的api接口返回方法返回数据
return Api::ok($data);
public function show($uniqid)
{
$captcha = new \ajiho\Captcha();
//存缓存,时间短一点,减少压力
cache('captcha_' . $uniqid, $captcha->getCode(), 120);
//输出图像
return $captcha->outImg();
}
public function login(Request $request)
{
$params = $request->all();
//表单验证
try {
validate([
'username|用户名' => ' ])->check($params);
//从缓存中根据uniqid取验证码
$code = cache('captcha_' . $params['uniqid']);
if (!$code) {//没取到说明验证码过期
return Api::fail('验证码过期,请刷新后重试');
}
//对比缓存中的验证码和表单传递过来的验证码是否相等
if ($params['code'] !== $code) {
return Api::fail('验证码错误');
}
} catch (ValidateException $e) {
return Api::fail($e->getError());
}
//验证通过...向下继续执行你的登录逻辑
}