Laravel自定义中间件出现ERR_TOO_MANY_REDIRECTS无限重定向问题
解决Laravel Breeze + Inertia自定义认证中间件导致的无限重定向问题
无限重定向的核心原因是自定义中间件逻辑完全搞反,且重定向目标就是当前受保护的路由,形成循环跳转:
- 用户已登录(session存在
user_data)访问/dashboard时,中间件强制重定向到RouteServiceProvider::HOME(即/dashboard) - 重定向后再次进入
/dashboard,中间件重复触发相同重定向,陷入无限循环
修复步骤
- 修正中间件逻辑:中间件的作用是保护
/dashboard,应拒绝未登录用户访问,而非已登录用户。正确逻辑为:session无user_data时重定向到登录页,已登录则允许继续访问。
修正后的CustomAuthMiddleware代码:
class CustomAuthMiddleware { public function handle(Request $request, Closure $next) { // 未登录(无user_data)则跳转到登录页 if (!session()->has('user_data')) { return redirect()->route('login'); } // 已登录则允许访问后续路由 return $next($request); } }
- 确认路由分组合理性:当前
/dashboard路由已被custom_auth中间件保护,无需在中间件中重复重定向到该路由。
额外注意事项
- 确认
RouteServiceProvider::HOME的定义与路由匹配,避免后续路由冲突 - 若手动在登录/注册逻辑中设置
user_data到session,需确保登录成功后该操作正确执行,否则中间件会一直判定用户未登录
内容的提问来源于stack exchange,提问作者mending3
相关产品推荐
相关产品推荐

