当前位置: 首页 > news >正文

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

<?phpnamespace 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).请求结果

在这里插入图片描述

在这里插入图片描述

相关文章:

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

1. 安装 gregwar/captcha 图片验证码接口的流程是&#xff1a; 生成图片验证码 生成随机的 key&#xff0c;将验证码文本存入缓存。 返回随机的 key&#xff0c;以及验证码图片 # 不限于 laravel 普通 php 项目也可以使用额 $ composer require gregwar/captcha2. 开发接口 …...

iMazing3安全吗?好不好用?值不值得下载

一、安全性 iMazing在设计和开发过程中&#xff0c;始终把用户数据的安全性放在首位。它采用了多种先进的安全技术来确保用户数据在传输、备份和存储过程中的安全。 iMazing3Mac-最新绿色安装包下载如下&#xff1a; https://wm.makeding.com/iclk/?zoneid49816 iMazing3Wi…...

韩国突发:将批准比特币ETF

作者&#xff1a;秦晋 韩国两党宣布将批准比特币ETF。比特币也再次成为竞选的宠儿。 4月10日&#xff0c;韩国将迎来每隔4年而进行的一次立法大选。在大选之前&#xff0c;现执政党与反对党都承诺将批准比特币ETF。 我们知道&#xff0c;比特币的主要受众群体以年轻人居多。此前…...

Kubernetes IoTDB系列 | IoTDB数据库同步|IoTDB数据库高可用

目录 一、介绍二、应用场景三、IoTDB 数据库搭建四、修改同步配置文件1、配置接收端的参数2、配置发送端的参数五、启动同步功能发送端六、测试一、介绍 IoTDB 数据库同步是指将一个节点的数据复制到其他节点,以确保数据的冗余和可用性。在分布式环境中,数据同步是保证系统高…...

重拾前端基础知识:CSS

重拾前端基础知识&#xff1a;CSS 前言选择器简单选择器属性选择器组合选择器 插入CSS内嵌样式&#xff08;Inline Style&#xff09;内部样式&#xff08;Internal Style&#xff09;外部样式&#xff08;External Style&#xff09; 层叠颜色背景颜色文本颜色RGB 颜色HEX 颜色…...

综合实战(volume and Compose)

"让我&#xff0c;重获新生~" MySQL 灾难恢复 熟练掌握挂载卷的使用&#xff0c;将Mysql的业务数据存储在 外部。 实战思想: 使用 MySQL 5.7 的镜像创建容器并创建一个普通数据卷 "mysql-data"用来保存容器中产生的数据。我们需要容器连接到Mysql服务&a…...

国际黄金价格要具体市况具体分析

国际黄金价格走势多变&#xff0c;投资者在参与的过程中要注意自己交易策略的灵活度&#xff0c;要做到具体市况具体分析&#xff0c;而且面对不同的市况&#xff0c;要采用不同的挂单方式&#xff0c;这样才能把握住更有利的入场时机。在大家常用的现货黄金交易软件MT4中&…...

【python】0、超详细介绍:json、http

文章目录 一、json二、http2.1 json 读取 request 序列化 三、基本类型3.1 decimal 四、图像4.1 颜色格式转换 一、json import json f open(data.json) # open json file data json.load(f) # 读出 json object for i in data[emp_details]: # 取出一级属性 emp_details, …...

可观测性在威胁检测和取证日志分析中的作用

在网络中&#xff0c;威胁是指可能影响其平稳运行的恶意元素&#xff0c;因此&#xff0c;对于任何希望避免任何财政损失或生产力下降机会的组织来说&#xff0c;威胁检测都是必要的。为了先发制人地抵御来自不同来源的任何此类攻击&#xff0c;需要有效的威胁检测情报。 威胁…...

win32com打开带密码excel

简单来说给excel上加密常见的方法有两种 方法一&#xff1a; 直接修改文件属性 这种方法对应的解法是 excel DispatchEx("Excel.Application") # 启动excel excel.Visible visible # 可视化 excel.DisplayAlerts displayalerts # 是否显示警告 wb excel.Wo…...

IntelliJ IDEA 的常用快捷键

IntelliJ IDEA 的常用快捷键非常多&#xff0c;这些快捷键可以帮助你更高效地编写代码。以下是一些常用的快捷键总结&#xff1a; 基础操作 CtrlN&#xff1a;查找类CtrlShiftN&#xff1a;查找文件CtrlAltL&#xff1a;格式化代码AltInsert&#xff1a;生成代码&#xff08;…...

C语言统计成绩

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 问题描述 解决方案 总结 描述 输入n科成绩&#xff08;浮点数表示&#xff09;&#xff0c;统计其中的最高分&#xff0c;最低分以及平均分。 数据范围&#xff1a;1≤&#xfffd;≤100 1≤n≤100 &#xff0c; …...

LVS做集群四层负载均衡的简单理解

背景&#xff1a;业务中主要是TCP/SSL连接&#xff0c;要做四层负载均衡。 之前做负载均衡&#xff0c;调研了nginx&#xff08;见之前的nginx实现后端服务负载均衡和nginx负载均衡监测后台服务状态&#xff09;。 nginx作为一个应用&#xff0c;做四层负载均衡效率低。lvs是li…...

2.1_6 线程的实现方式和多线程模型

文章目录 2.1_6 线程的实现方式和多线程模型&#xff08;一&#xff09;线程的实现方式&#xff08;1&#xff09;用户级线程&#xff08;2&#xff09;内核级线程 &#xff08;二&#xff09;多线程模型&#xff08;1&#xff09;一对一模型&#xff08;2&#xff09;多对一模…...

4.5 MongoDB 文档存储

目录 1. 相关安装 2. Pycharm可视化观察MongoDB 3. python使用 MongoDB 最初流程代码 4. 插入、查询、更新、删除数据 4.1 插入数据 4.2 查询数据 4.3 更新数据 4.3.1 更新一条数据 4.3.2 更新多条数据 4.4 删除数据 5. 计数、排序、偏移 5.1 计数 5.2 排序 5.3 …...

什么是服务级别协议(SLA)?

在数字化时代&#xff0c;企业和服务提供商之间的关系变得越来越复杂&#xff0c;而服务级别协议&#xff08;SLA&#xff09;则在这个复杂网络中发挥着至关重要的作用。本文将深入介绍SLA&#xff0c;从它的定义、应用场景到监测方法&#xff0c;全方位解析这一法律桥梁如何确…...

使用Python进行Sentinel-2 图像聚类

聚类或无监督分类是根据统计相似性将图像的像素值分组或聚合到一定数量的自然类(组)的过程。在本教程中,我们将使用rasterio进行sentinel-2图像处理,并使用功能强大的完整scikit-learn python 包在jupyter Notebook中进行聚类。 Scikit-learn是一个用于 Python 编程语言的…...

SNZ资本的首席信息官Gavin确认出席Hack .Summit() 2024香港开发者大会!

SNZ资本的首席信息官Gavin确认将出席由 Hack VC 主办&#xff0c;并由 AltLayer 和 Berachain 联合主办&#xff0c;与 SNZ 和数码港合作&#xff0c;由 Techub News 承办的Hack.Summit() 2024区块链开发者盛会。 Gavin是SNZ控股和SNZ资本的首席信息官。Gavin在区块链和金融科技…...

js里面有引用传递吗?

一&#xff1a;什么是引用传递 引用传递是相对于值传递的。那什么是值传递呢&#xff1f;值传递就是在传递过程中再复制一份&#xff0c;然后再赋值给变量&#xff0c;例如&#xff1a; let a 2; let b a;在这个代码中&#xff0c;let b a; 就是一个值传递&#xff0c;首先…...

C 语言 math.h 库介绍

在 C 语言中&#xff0c;math.h 头文件定义了各种数学函数和一个宏&#xff0c;用于处理数学运算。这些函数接受 double 类型的参数&#xff0c;并返回 double 类型的结果。 库宏 在 math.h 中定义了唯一的一个宏&#xff1a; HUGE_VAL&#xff1a;当函数的结果不可表示为浮…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...