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

Laravel 12 实现验证码功能

Laravel 12 实现验证码功能

在 Laravel 12 中实现验证码功能可以通过多种方式,以下是几种常见的方法:

方法一:使用 Captcha 包(推荐)

  1. 首先安装 mews/captcha 包:
composer require mews/captcha
  1. 发布配置文件:
php artisan vendor:publish --provider="Mews\Captcha\CaptchaServiceProvider"
  1. config/captcha.php 中配置验证码选项

  2. 在表单视图中添加验证码:

<div class="form-group"><label for="captcha">验证码</label>{!! captcha_img() !!}<input id="captcha" type="text" class="form-control" name="captcha" required>
</div>
  1. 在控制器中验证:
public function postRegister(Request $request)
{$this->validate($request, ['captcha' => 'required|captcha']);// 其他注册逻辑
}

方法二:使用 Google reCAPTCHA

  1. 安装 Google reCAPTCHA 包:
composer require google/recaptcha
  1. .env 中添加:
RECAPTCHA_SITE_KEY=your_site_key
RECAPTCHA_SECRET_KEY=your_secret_key
  1. 在表单中添加:
<div class="g-recaptcha" data-sitekey="{{ env('RECAPTCHA_SITE_KEY') }}"></div>
<script src="https://www.google.com/recaptcha/api.js"></script>
  1. 在控制器中验证:
use ReCaptcha\ReCaptcha;public function validateCaptcha(Request $request)
{$recaptcha = new ReCaptcha(env('RECAPTCHA_SECRET_KEY'));$response = $recaptcha->verify($request->input('g-recaptcha-response'), $request->ip());if (!$response->isSuccess()) {// 验证失败处理}// 其他逻辑
}

方法三:自定义验证码(简单实现)

  1. 创建验证码生成路由:
Route::get('/captcha', function() {$image = imagecreatetruecolor(100, 40);$bgColor = imagecolorallocate($image, 255, 255, 255);$textColor = imagecolorallocate($image, 0, 0, 0);imagefilledrectangle($image, 0, 0, 100, 40, $bgColor);$code = substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 6);session(['captcha' => $code]);imagestring($image, 5, 20, 12, $code, $textColor);header('Content-Type: image/png');imagepng($image);imagedestroy($image);
});
  1. 在视图中使用:
<img src="/captcha" alt="CAPTCHA" onclick="this.src='/captcha?'+Math.random()">
<input type="text" name="captcha" required>
  1. 验证:
if ($request->input('captcha') !== session('captcha')) {return back()->withErrors(['captcha' => '验证码错误']);
}

注意事项

  1. 验证码应该有一定的复杂度,防止被机器识别
  2. 可以考虑添加干扰线、噪点等增加安全性
  3. 验证码应该有有效期限制(通常5-10分钟)
  4. 对于重要操作,建议使用更安全的验证方式如短信验证码

以上方法可以根据项目需求选择使用,第一种方法是最简单快捷的实现方式。

相关文章:

  • 解决 Chrome 与 Chromedriver 版本不一致问题的方法
  • 如何在金仓数据库KingbaseES中新建一个数据库?新建一个表?给表添加一个字段?
  • android 折叠屏开发适配全解析:多窗口、铰链处理与响应式布局
  • 【北京迅为】iTOP-4412精英版使用手册-第八章 Android 4.4系统编译
  • 物业设备管理的“多系统协同”模式:ERP、IoT与工单系统如何联动?
  • C26-冒泡排序法
  • BT回测框架Cerebro,DataFeeds和Strategies的介绍
  • 2021-11-11 C++泰勒sin(x)以2步进乘方除以阶乘加减第N项
  • 项目优先级频繁变动,如何应对?
  • FID和IS的区别
  • 前端三大件--HTML
  • @Autowired 的实现原理
  • 基于 SpringBoot + Vue 的校园管理系统设计与实现
  • .net在DB First模式使用pgsql
  • Java Web 开发:过滤器 (Filter) vs 拦截器 (Interceptor) - 深度剖析与选择指南
  • C++ std::sort 函数
  • JS进阶DAY2 构造函数数据常用函数
  • 能效提升超 61%!Fortinet 发布《2024 年可持续发展报告》
  • 精益数据分析(47/126):深挖UGC商业模式的关键要点与指标
  • 5月7号.
  • 重庆三峡学院回应“85万元中标设备,网购价不到300元”:已着手解决
  • 中美会谈前都发生了什么?美方为何坐不住了?
  • 匈牙利史专家阚思静逝世,享年87岁
  • 巴防空系统击落印度无人机,印称巴方违反停火协议
  • 图集︱“中国排面”威武亮相
  • 时代中国控股:前4个月销售额18.1亿元,境外债重组协议押后聆讯至5月底