Laravel 9.x Jetstream Captcha 验证码

采用 mews/captcha

  • 执行 composer require mews/captcha

  • config/app.php 中添加

    'providers' => [
      ...
      Mews\Captcha\CaptchaServiceProvider::class,
    ]
  • 执行 php artisan vendor:publish

  • 配置文件在 config/captcha.php, 看情况修改

  • 在对应的模板中添加

    ...
    <div class="mt-4">
      <div class="mt-2">
          <img src="{{captcha_src()}}" style="cursor: pointer" onclick="this.src='{{captcha_src()}}'+Math.random()" />
      </div>
      <div class="mt-2">
          <x-jet-input type="text" class="form-control {{$errors->has('captcha')?'parsley-error':''}}" name="captcha" placeholder="captcha" />
      </div>
    </div>
    ...
  • 新建 app/Actions/Fortify/CaptchaValidation.php

    <?php
    namespace App\Actions\Fortify;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Validator;
    class CaptchaValidation
    {
      public function __invoke(Request $request, $next)
      {
          Validator::make($request->all(), [
              'captcha' => 'required|captcha'
          ])->validate();
    
          return $next($request);
      }
    }
  • app/Providers/JetstreamServiceProvider.phpboot 方法中添加

      public function boot()
      {
          // ...
          // 记得没有 use 的上面 use 一下
    
          Fortify::authenticateThrough(function (Request $request) {
              return array_filter([
                  config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
                  CaptchaValidation::class,
                  Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
                  AttemptToAuthenticate::class,
                  PrepareAuthenticatedSession::class,
              ]);
          });
      }
  • 然后就应该 ok 了

Laravel 9.x Jetstream Captcha 验证码

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!