You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Auth::routes生成的注册POST路由分配ProtectAgainstSpam中间件

给自动生成的注册POST路由分配中间件的三种可行方案

Auth::routes生成的注册POST路由默认参数如下:路由别名为register,对应控制器方法为App\Http\Controllers\Auth\RegisterController@register,请求路径为/register,可任选以下方案实现中间件分配:

方案1:在控制器中绑定中间件(最便捷)

直接修改注册控制器的构造方法,给注册提交的方法单独绑定中间件,不需要修改路由文件。
打开app/Http/Controllers/Auth/RegisterController.php,修改构造方法:

public function __construct()
{
    $this->middleware('guest');
    // 新增以下代码,仅给注册提交方法加防垃圾中间件
    $this->middleware(\Spatie\Honeypot\ProtectAgainstSpam::class)->only('register');
}

方案2:手动覆盖路由定义

Laravel路由按定义顺序从上到下匹配,先手动定义注册POST路由,优先级会高于Auth::routes自动生成的同路径路由,直接附加中间件即可。
在routes/web.php中按如下顺序写代码:

// 先手动定义注册POST路由,加指定中间件
Route::post('register', [App\Http\Controllers\Auth\RegisterController::class, 'register'])
    ->middleware(\Spatie\Honeypot\ProtectAgainstSpam::class)
    ->name('register');

// 保留原有的Auth路由定义即可,重复的注册POST路由会被自动忽略
Auth::routes(['verify' => true]);

方案3:在路由服务提供者中动态绑定

不需要修改控制器或路由文件,在服务提供者中匹配到注册路由时动态附加中间件。
打开app/Providers/RouteServiceProvider.php,在boot方法中添加如下代码:

public function boot()
{
    parent::boot();

    // 匹配到注册路由时动态加中间件
    Route::matched(function (\Illuminate\Routing\Events\RouteMatched $event) {
        if ($event->route->getName() === 'register') {
            $event->route->pushMiddleware(\Spatie\Honeypot\ProtectAgainstSpam::class);
        }
    });
}

内容的提问来源于stack exchange,提问作者poashoas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:15:04