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).請求結果

在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

神經網絡算法詳解以及應用場景

神經網絡算法是一類基于神經網絡思想的機器學習算法。神經網絡是一種模擬人腦神經系統的計算模型&#xff0c;由大量的人工神經元組成&#xff0c;這些神經元通過可調的連接權值相互連接&#xff0c;形成復雜的網絡結構。神經網絡具有大規模并行處理、分布式信息存儲、良好的自…

小塔RFID技術幫您解決“倉儲管理危機”!

商品積壓對一個企業帶來的影響是久遠的&#xff0c;倉儲管理流轉失衡&#xff1a;庫存數據不準確、繁瑣人工管理費時費力、商品爆倉及庫存短缺等造成“倉儲管理危機”&#xff0c;讓企業自身陷入困境。 優化倉儲管理&#xff0c;小塔RFID倉儲管理方案輕松解決。利用RFID&#x…

java數據結構與算法刷題-----LeetCode538. 把二叉搜索樹轉換為累加樹

java數據結構與算法刷題目錄&#xff08;劍指Offer、LeetCode、ACM&#xff09;-----主目錄-----持續更新(進不去說明我沒寫完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目錄 解題思路 BST二叉搜索樹&#xff0c;中序遍歷結果為一個升序序列…

【C語言】三子棋

前言&#xff1a; 三子棋是一種民間傳統游戲&#xff0c;又叫九宮棋、圈圈叉叉棋、一條龍、井字棋等。游戲規則是雙方對戰&#xff0c;雙方依次在9宮格棋盤上擺放棋子&#xff0c;率先將自己的三個棋子走成一條線就視為勝利。但因棋盤太小&#xff0c;三子棋在很多時候會出現和…

心得 醒悟

學習是一個學習&#xff0c;遺忘&#xff0c;回憶。。。的一個不間斷個過程&#xff0c;學習python很心急&#xff0c;沒有怎么實操&#xff0c;開著2倍速看視頻&#xff0c;導致看過后很多對列表&#xff0c;字典的命令等等就忘記了&#xff0c;沒有真的學會&#xff0c;導致現…

Unity(第十四部)光照

原始的有默認燈光、除了默認的你還可以創建 1、定向光源&#xff08;類似太陽、從無限遠的地方射向地面的光&#xff0c;光源位置并不影響照射角度等&#xff0c;不同方向的旋轉影響角度和明亮&#xff09; 1. 顏色&#xff1a;調整光的顏色2. 模式&#xff1a;混合是實時加烘…

FCU2601嵌入式控制單元獲得開普「電磁兼容檢驗證書」

近日&#xff0c;飛凌嵌入式專為鋰電池儲能行業設計的FCU2601嵌入式控制單元獲得了開普電磁兼容檢驗證書&#xff0c;此次性能檢驗項目包括高頻干擾檢驗、靜電放電干擾檢驗、輻射電磁場干擾檢驗、快速瞬變脈沖群干擾檢驗、浪涌干擾檢驗、工頻磁場干擾檢驗、阻尼振蕩磁場干擾檢驗…

基于docker實現MySQL主從復制(全網最詳細!!!)

一、 通過docker鏡像搭建MySQL主從 主服務器&#xff1a;容器名zi-mysql-master&#xff0c;端口3306 從服務器&#xff1a;容器名zi-mysql-slave1&#xff0c;端口3307 從服務器&#xff1a;容器名zi-mysql-slave2&#xff0c;端口3308 二、 關閉防火墻&#xff0c;啟動docker…

免費百度快速收錄軟件

在網站SEO的過程中&#xff0c;不斷更新網站內容是提升排名和吸引流量的關鍵之一。而對于大多數網站管理員來說&#xff0c;頻繁手動更新文章并進行SEO優化可能會是一項繁瑣且耗時的任務。針對這一問題&#xff0c;百度自動更新文章SEO工具應運而生&#xff0c;它能夠幫助網站管…

基于R語言APSIM模型進階應用與參數優化、批量模擬教程

原文&#xff1a;基于R語言APSIM模型進階應用與參數優化、批量模擬教程 前沿 隨著數字農業和智慧農業的發展&#xff0c;基于過程的農業生產系統模型在模擬作物對氣候變化的響應與適應、農田管理優化、作物品種和株型篩選、農田固碳和溫室氣體排放等領域扮演著越來越重要的作…

全域營銷、全員營銷與霸詞、霸屏、霸網:揭秘數字營銷的五大核心策略

全域營銷、全員營銷與霸詞、霸屏、霸網&#xff1a;揭秘數字營銷的五大核心策略 隨著科技的飛速發展和互聯網的深度滲透&#xff0c;數字營銷已成為企業品牌推廣和市場拓展的必備手段。全域營銷、全員營銷、霸詞、霸屏和霸網這五大策略&#xff0c;更是引領著數字營銷的新潮流…

CCF-A類 IEEE VIS‘24 3月31日截稿!探索可視化技術的無限可能!

會議之眼 快訊 IEEE VIS (IEEE Visualization Conference )即可視化大會將于 2024 年 10月13日 -18日在美國佛羅里達州皮特海灘的信風島大海灘度假舉行&#xff01;圣彼得海灘&#xff0c;以其迷人的日落和和煦的微風&#xff0c;作為激發創造力和促進可視化社區內合作的完美背…

工廠模式 詳解 設計模式

工廠模式 其主要目的是封裝對象的創建過程&#xff0c;使客戶端代碼和具體的對象實現解耦。這樣子就不用每次都new對象&#xff0c;更換對象的話&#xff0c;所有new對象的地方也要修改&#xff0c;違背了開閉原則&#xff08;對擴展開放&#xff0c;對修改關閉&#xff09;。…

使用Gson解析數組類型的JSON字符串

要使用Gson解析數組類型的JSON字符串&#xff0c;首先需要創建一個Java類來表示這個數組中的數據類型。例如&#xff0c;假設我們要解析的JSON數組如下&#xff1a; [{"name": "John Doe","age": 35},{"name": "Jane Smith"…

win中刪除不掉的文件,火絨粉碎刪除親測有效

看網上的 win R 然后終端輸入什么刪除的&#xff0c;照做了都沒有刪掉 有火絨的可以試試&#xff1a; 拖進去就刪掉了 很好使

選項 打光 試題總結

試題1 被測物體100100mm&#xff0c;精度要求被測物體 &#xff0c;精度要求0.1mm&#xff0c;相機距被測物體在200&#xff5e;320mm之間&#xff0c;要求選擇合適的相機和鏡頭&#xff1f; 分析如下&#xff1a; 通常我們用的相機靶面是4:3 的所以我們要用短邊來計算視場&am…

Jmeter系列(5)線程數到底能設置多大

疑惑 一臺設備的線程數到底可以設置多大&#xff1f; 線程數設置 經過一番搜索找到了這樣的答案&#xff1a; Linux下&#xff0c;2g的 java內存&#xff0c;1m 的棧空間&#xff0c;最大啟動線程數2000線程數建議不超過1000jmeter 能啟動多少線程&#xff0c;由你的堆內存…

CSS常用選擇器及注意事項

CSS選擇器是CSS中的基本概念&#xff0c;用于選擇頁面上要樣式化的元素。下面詳細介紹CSS中所有的選擇器、使用方法及注意事項。 1. 基本選擇器 通用選擇器&#xff08;Universal Selector&#xff09;&#xff1a;*&#xff0c;選擇頁面上的所有元素。元素類型選擇器&#x…

Tomcat 下部署若依單體應用可觀測最佳實踐

實現目標 采集指標信息采集鏈路信息采集日志信息采集 RUM 信息會話重放 即用戶訪問前端的一系列過程的會話錄制信息&#xff0c;包括點擊某個按鈕、操作界面、停留時間等&#xff0c;有助于客戶真是意圖、操作復現 版本信息 Tomcat (9.0.81)Springboot(2.6.2)JDK (>8)DDT…

【Redis筆記】Redis消息隊列方案

Reids消息隊列&#xff08;Message Queue&#xff09; 消息隊列 是指利用 高效可靠 的 消息傳遞機制 進行與平臺無關的 數據交流&#xff0c;并基于數據通信來進行分布式系統的集成。 消息隊列具有 低耦合、可靠投遞、廣播、流量控制、最終一致性 等功能。 常見的消息隊列 有 …