Laravel - API 项目适用的图片验证码

1. 安装 gregwar/captcha

图片验证码接口的流程是:

生成图片验证码
生成随机的 key,将验证码文本存入缓存。
返回随机的 key,以及验证码图片

# 不限于 laravel 普通 php 项目也可以使用额
$ composer require gregwar/captcha

2. 开发接口

1). 新建路由

routes/web.php

oute::prefix('auth')->group(function (){
    Route::post('captchas', [CaptchasController::class, 'store']);    
});

2). 新建控制器和表单验证类

创建 CaptchasController 以及 CaptchaRequest

$ php artisan make:controller CaptchasController
$ php artisan make:request Api/CaptchaRequest

修改文件如下

app/Http/Requests/Api/CaptchaRequest.php

<?php

namespace App\Http\Requests\Api;

use Illuminate\Foundation\Http\FormRequest;

class CaptchaRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            // 'phone' => 'required|regex:/^1[34578]\d{9}$/|unique:users',
        ];
    }
}

app/Http/Controllers/CaptchasController.php


<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Gregwar\Captcha\CaptchaBuilder;
use App\Http\Requests\Api\CaptchaRequest;
class CaptchasController extends Controller
{
    public function store(CaptchaRequest $request, CaptchaBuilder $captchaBuilder)
    {   
    
        // $key = 'captcha-'.str_random(15);
        $key = 'captcha-'.time();
        $phone = $request->phone;
        $captcha = $captchaBuilder->build();
        $expiredAt = now()->addMinutes(2);
        \Cache::put($key, ['phone' => $phone, 'code' => $captcha->getPhrase()], $expiredAt);

        $result = [
            'captcha_key' => $key,
            'expired_at' => $expiredAt->toDateTimeString(),
            'captcha_image_content' => $captcha->inline()
        ];
        return $result;
        return $this->response->$result->setStatusCode(201);
    }
}

代码分析

use Gregwar\Captcha\CaptchaBuilder;
创建验证码实例: $captcha = $captchaBuilder->build();
获取验证码值: $captcha->getPhrase(); // abcd…
获取验证码图片的 base64: $captcha->inline() // base64 xxxxx

3). 代码分解

分析一下代码:

增加了 CaptchaRequest 要求用户必须通过手机号调用图片验证码接口。
controller 中,注入CaptchaBuilder,通过它的 build 方法,创建出来验证码图片
使用 getPhrase 方法获取验证码文本,跟手机号一同存入缓存。
返回 captcha_key,过期时间以及 inline 方法获取的 base64 图片验证码
这里给图片验证码设置为 2 分钟过期,

4).请求结果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/415732.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机(6)-----直流电机的介绍与使用(通过独立按键控制电机的运行)

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 目录 一. 直流电机模块介绍 1.直流电机介绍 2.电机参数 二. 程序设计…

Oracle 直接路径插入(Direct-Path Insert)

直接路径插入&#xff08;Direct Path Insert&#xff09;是Oracle一种数据加载提速技术&#xff0c;可以在使用insert语句或SQL*Loader工具大批量加载数据时使用。直接路径插入处理策略与普通insert语句完全不同&#xff0c;Oracle会通过牺牲空间&#xff0c;安全性&#xff0…

防御保护:防火墙内容安全

一、IAE&#xff08;Intelligent Awareness Engine&#xff09;引擎 二、深度检测技术(DFI和DPI&#xff09; 1.DPI – 深度包检测技术 DPI主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#x…

2024年阿里云2核4G云服务器性能如何?价格便宜有点担心

阿里云2核4G服务器多少钱一年&#xff1f;2核4G服务器1个月费用多少&#xff1f;2核4G服务器30元3个月、85元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

第三节-docker-cs架构分析

一、组成 docker engine&#xff1a;docker-client、rest-api、dockerd containerd&#xff1a; 1、管理容器生命周期 2、拉取/推送镜像 3、存储管理 4、调用runc 5、管理网络 containerd-shim&#xff1a;相当于一个驱动&#xff0c;containerd通过containerd-shim驱使…

SpringCloudNacos配置管理及热更新

文章目录 统一配置管理在nacos中添加配置文件从微服务拉取配置配置热更新方式1方式2 配置优先级 之前对 Nacos注册中心入门 已经做了演示. 这篇文章对 Nacos 的服务分级存储模型做理论与实践. 本篇文章阐述 Nacos 做配置中心的理论和实践. 统一配置管理 当微服务部署的实例越…

Vue NextTick工作原理及使用场景

$nextTick的定义及理解&#xff1a; 定义&#xff1a;在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操…

热点参数流控(Sentinel)

热点参数流控 热点流控 资源必须使用注解 SentinelResource 编写接口 以及 热点参数流控处理器 /*** 热点流控 必须使用注解 SentinelResource* param id* return*/ RequestMapping("/getById/{id}") SentinelResource(value "getById", blockHandler …

Media Encoder 2024 for Mac v24.2.1中文激活版

Adobe Media Encoder 2024 for Mac 是一款专业的视频和音频编码工具&#xff0c;专为 Mac 用户打造。它可以将原始素材转换为各种流行格式&#xff0c;以满足不同的播放和发布需求。借助其先进的编码技术和预设设置&#xff0c;用户可以轻松优化输出质量&#xff0c;同时保持文…

森林监测VR虚拟情景再现系统更便利

AI人工智能技术已经逐渐渗透到各个领域&#xff0c;为我们的生活带来了诸多便利。在虚拟仿真教学领域&#xff0c;AI技术的应用也日益丰富&#xff0c;为虚拟情景交互体验带来了前所未有的好处。 提高VR虚拟情景的逼真度 通过深度学习和计算机视觉等技术&#xff0c;AI/VR虚拟现…

[unity]lua热更新——个人复习笔记【侵删/有不足之处欢迎斧正】

一、AssetBundle AB包是特定于平台的资产压缩包&#xff0c;类似于压缩文件 相对于RESOURCES下的资源&#xff0c;AB包更加灵活轻量化&#xff0c;用于减小包体大小和热更新 可以在unity2019环境中直接下载Asset Bundle Browser 可以在其中设置关联 AB包生成的文件 AB包文件…

2024.02.28作业

模拟面试 1. 什么是回调函数 将函数作为另一函数的参数 实现&#xff1a;通过函数指针&#xff0c;如线程的创建函数 2. 结构体和共用体的区别 结构体的每个成员都会分配内存&#xff0c;大小为各个成员所占内存之和&#xff0c;内存对齐 共用体的内存以最大成员为主 3. 赋…

MATLAB练习题:投骰子经过100格的概率

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 有一个人从原点&#xff08;第0格&#xff09;开始扔一个六面…

【Ansys Fluent Web 】全新用户界面支持访问大规模多GPU CFD仿真

基于Web的技术将释放云计算的强大功能&#xff0c;加速CFD仿真&#xff0c;从而减少对硬件资源的依赖。 主要亮点 ✔ 使用Ansys Fluent Web用户界面™&#xff08;UI&#xff09;&#xff0c;用户可通过任何设备与云端运行的仿真进行远程交互 ✔ 该界面通过利用多GPU和云计算功…

玩客云刷机(保姆级教程)ArmBian+Casaos

最近我发现自己买的玩客云会24小时写我的硬盘&#xff0c;后面了解了一下&#xff0c;玩客云有链克计划&#xff0c;会一直写你的盘&#xff0c;且关不掉&#xff0c;所以我就自己刷了个机&#xff0c;刷成了Armbian&#xff0c;下面就是我的教程 准备材料 一根usb公对公的线…

flink重温笔记(八):Flink 高级 API 开发——flink 四大基石之 Window(涉及Time)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第八天啦&#xff01;学习了 flink 高级 API 开发中四大基石之一&#xff1a; window&#xff08;窗口&#xff09;知识点&#xff0c;这一部分只要是解决数据窗口计算问题&#xff0c;其中时间窗口涉及时间&#xff0c;计数…

046-WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

046-WEB攻防-注入工具&SQLMAP&Tamper编写&指纹修改&高权限操作&目录架构 #知识点&#xff1a; 1、SQLMAP-常规猜解&字典配置 2、SQLMAP-权限操作&文件命令 3、SQLMAP-Tamper&使用&开发 4、SQLMAP-调试指纹&风险等级 演示案例&#xf…

华为配置AP接入GPON网络配置示例

配置AP接入GPON网络配置示例 组网图形 图1 配置AP接入GPON网络示例 表1 版本信息 网元 设备选型 版本 OLT EA5800 V100R019C20 AC AC6805 V200R019C10 AP AirEngine 6760-X1 配套安装OptiXstar S800E GPON光模块 V200R019C10 Switch S6320-SI V200R019C10 ^^^ 组…

[python]随机选取的方式——random.choices()

关于随机选取的函数。 1. 列表随机选取 1.1. 随机等概率选取一个结果 首先我们来想象一下&#xff0c;现在有一个列表&#xff0c;要在其中随机选取一个数字&#xff0c;比如&#xff1a; a [1,2,3,4,5] 这里我们需要用到一种比较简单的随机选取方式&#xff0c;即random…

Vueuse:打造高效的 Vue.js 开发利器

Vueuse&#xff1a;打造高效的 Vue.js 开发利器 Vueuse 是一个功能强大的 Vue.js 生态系统工具库&#xff0c;它提供了一系列的可重用的 Vue 组件和函数&#xff0c;帮助开发者更轻松地构建复杂的应用程序。本文将介绍 Vueuse 的主要特点和用法&#xff0c;以及它在 Vue.js 开发…