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

Laravel如何在middlewareGroups前运行中间件校验URL登录token参数

问题根因

你遇到Auth::guest()永远返回真的核心原因是中间件执行顺序错误:
你把自定义中间件放在了全局$middleware数组中,该数组的中间件会早于web中间件组执行,而Laravel的登录状态依赖Session,StartSession中间件是定义在web组内的,你执行校验逻辑时Session还未初始化,自然读不到已登录的用户信息。

要不要改用ServiceProvider实现?

不需要,该逻辑属于请求生命周期内的流量校验逻辑,本身就适合用中间件实现;ServiceProvider的作用是注册、初始化应用服务,不适合放置请求处理类的逻辑。

解决方案(无需改动现有认证逻辑)

仅需要调整自定义中间件的注册位置即可:

  1. 先删除全局$middleware数组中的\App\Http\Middleware\CheckRepLoginToken::class注册项
  2. 将该中间件注册到web中间件组,放在StartSession之后、其他权限校验中间件之前,调整后的web组代码如下:
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \App\Http\Middleware\CheckRepLoginToken::class, // 新增到这一行
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
    // api组保持原有配置不变
];

调整后满足的要求:

  • Session已经初始化完成,Auth::guest()可以正常读取当前用户的登录状态
  • 自定义校验逻辑执行在auth等路由中间件之前,存在有效token时会先完成自动登录,不会被提前重定向到登录页
  • 原有认证逻辑完全不需要修改,仅调整了中间件执行顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:54:05