必须在中间件逻辑里主动放行公开路由,如/login、/register;可通过$request->is()匹配路径、auth::check()判断登录状态,并结合路由级中间件、控制器except()或脱离web组等方式精准跳过。

全局中间件里怎么跳过登录页
全局中间件会拦截所有请求,包括 /login、/register 这类公开路由,结果就是用户点登录页反而被重定向回登录页——无限循环。关键不是“能不能跳过”,而是“必须在中间件逻辑里主动放行”。
比如你写了 AutorizacaoMiddleware 并加到了 $middleware 数组,那它就得自己判断:
- 用
$request->is('login')或$request->is('auth/login')匹配路径(注意前缀是否带/auth) - 用
$request->isMethod('GET')配合路径,避免误放 POST 登录请求 - 检查
\Auth::check()而非只看\Auth::guest(),防止已登录用户也被拦住
示例片段:
public function handle($request, Closure $next)
{
if ($request->is('login') || $request->is('register')) {
return $next($request);
}
if (\Auth::guest()) {
return redirect('/login');
}
return $next($request);
}
路由级中间件怎么绕过单个路由
比改全局更安全的做法:把中间件从全局挪到路由层,再针对性排除。核心是两步——先注册为路由中间件,再在路由定义时不加它。
在 app/Http/Kernel.php 的 $routeMiddleware 里注册:
'auth.check' => \App\Http\Middleware\AutorizacaoMiddleware::class
然后在 routes/web.php 中,只给需要的路由加中间件:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 要保护的路由:加
->middleware('auth.check') - 不保护的路由:完全不写
middleware,或显式写->withoutMiddleware([\App\Http\Middleware\AutorizacaoMiddleware::class]) - 如果用了
Route::group()套了一堆路由,但其中几个要公开,就别整个组加中间件,拆出来单独定义
控制器构造函数里怎么排除方法
当你用 php artisan make:controller HomeController --resource 生成控制器,并在构造函数里统一加了中间件,但其中 index、show 方法本该公开,这时候不能删整个构造函数逻辑——要用 except() 精确过滤。
例如:
public function __construct()
{
$this->middleware('auth.check')->except(['index', 'show', 'about']);
}
注意点:
-
except()只对当前控制器内定义的方法名生效,拼错或大小写不对就无效 - 如果方法是通过 trait 引入的,trait 中的方法名不会被自动识别,得手动补全
- 不要和
only()混用在同一行,Laravel 不支持链式叠加
web 中间件组导致的隐性拦截
很多“跳过失败”其实不是中间件本身的问题,而是 web 中间件组自带的副作用。它默认包含 StartSession、ShareErrorsFromSession,而某些认证中间件(比如 Laravel 自带的 auth)依赖 session 存在——没 session 就触发重定向。
如果你的公开路由根本不需要 session,最彻底的解法是让它脱离 web 组:
- 把路由移到
routes/api.php(适合无状态接口) - 或在
routes/web.php中不走分组,直接写:Route::get('/inforfq/{name}', [...]),不套Route::group(['middleware' => ['web']]) - 若必须用 web 功能(如 CSRF),但又不想触发 auth,就确认没在该路由上重复叠加
auth中间件
真正麻烦的从来不是“怎么配”,而是配完后忘了某处有个 Route::group 或控制器构造函数悄悄兜底加了中间件——建议用 php artisan route:list 对照检查实际绑定的中间件。










