上一篇
想象一下:你刚上线一个Laravel电商网站,结果第二天就收到大量垃圾注册请求,邮箱里塞满了虚假订单通知,更糟糕的是,有些用户因为输入错误连续刷新页面,导致验证码失效需要重新填写,这时候,一套完善的表单验证+验证码机制就显得尤为重要了。
// 控制器代码示例 use Illuminate\Support\Facades\Validator; public function register(Request $request) { $validator = Validator::make($request->all(), [ 'username' => 'required|max:20', 'password' => 'required|min:6', 'email' => 'required|email|unique:users' ], [ 'username.required' => '用户名不能为空哦~', 'email.unique' => '这个邮箱已经被注册啦!' ]); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput(); } // 验证通过后的注册逻辑... }
php artisan make:request UserRegisterRequest
// app/Http/Requests/UserRegisterRequest.php public function rules() { return [ 'username' => 'required|max:20|alpha_dash', 'password' => 'required|confirmed|min:8', 'email' => 'required|email|unique:users,email', 'captcha' => 'required|captcha' // 集成验证码规则 ]; } public function messages() { return [ 'password.confirmed' => '两次输入的密码不一致呢', 'captcha.captcha' => '验证码输入错误,再试一次吧~' ]; }
composer require mews/captcha:^3.2
config/app.php 配置:
'providers' => [ Mews\Captcha\CaptchaServiceProvider::class, ], 'aliases' => [ 'Captcha' => Mews\Captcha\Facades\Captcha::class, ]
发布配置文件:
php artisan vendor:publish --provider="Mews\Captcha\CaptchaServiceProvider"
<!-- 方式1:直接返回图片 --> <img src="{{ captcha_src() }}" onclick="this.src='/captcha/default?'+Math.random()"> <!-- 方式2:生成图片对象 --> {!! Captcha::img() !!} <!-- 方式3:API形式 --> <img src="{{ Captcha::src('flat') }}" alt="验证码">
// 在FormRequest中添加规则 public function rules() { return [ 'captcha' => 'required|captcha' ]; } // 或在控制器中直接验证 $request->validate([ 'captcha' => 'required|captcha' ]);
过期时间设置(config/captcha.php):
'default' => [ 'expire' => 120, // 2分钟有效期 'math' => true, // 启用算术验证码 ],
自定义字符集(防止OCR识别):
'characters' => ['a','b','c','2','3','4','5','6','7','8','9']
// 在FormRequest中组合验证 public function rules() { return [ 'username' => 'required|unique:users', 'password' => 'required|min:8', 'email' => 'required|email', 'captcha' => 'required|captcha' ]; }
// 使用spatie/laravel-validation-rules扩展 composer require spatie/laravel-validation-rules // 示例:国家代码验证 use Spatie\ValidationRules\Rules\CountryCode; public function rules() { return [ 'country' => [new CountryCode()], 'currency' => [new Currency()], // ISO 4217货币代码 ]; }
用户访问注册页面:
<form method="POST" action="/register"> @csrf <input type="text" name="username"> input type="email" name="email"> <input type="password" name="password"> <input type="password" name="password_confirmation"> <!-- 验证码区域 --> <div class="captcha"> {!! Captcha::img() !!} <input type="text" name="captcha"> </div> <button type="submit">注册</button> </form>
控制器处理逻辑:
public function register(UserRegisterRequest $request) { $user = User::create($request->validated()); // 清除验证码缓存(防止重复提交) Cache::forget('captcha_'.$request->session()->token()); return redirect('/login')->with('success', '注册成功!'); }
通过本文的实战解析,相信你已经掌握了Laravel中表单验证与验证码功能的完整实现流程,2025年的今天,安全与用户体验的平衡比以往任何时候都更加重要,而Laravel提供的强大工具链正是实现这一目标的最佳选择。
本文由 业务大全 于2025-08-25发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://xdh.7tqx.com/wenda/730921.html
发表评论