auth中间件作用是「仅允许已登录用户访问」,未登录时重定向至login页;guest中间件作用是「仅允许未登录用户访问」,已登录时重定向至/home页,二者共同构成登录态路由分流机制。

auth 和 guest 是 Laravel 内置的两个基础认证中间件,作用相反,共同构成登录态路由分流的核心机制。
auth:保护需登录才能访问的路由
它检查当前请求是否已通过认证(即 Auth::check() 返回 true)。如果用户未登录,请求会被立即重定向到 login 路由(由 RedirectIfAuthenticated 控制);如果已登录,则放行至控制器。
- 适用于 Dashboard、个人资料页、订单列表等需要用户身份的页面
- 默认依赖 session + web guard,不适用于 API 路由(API 应用
auth:sanctum或auth:api) - 不会校验角色或权限,只做“是否登录”这一层判断
guest:限制仅未登录用户可访问
它是 auth 的反向逻辑:一旦 Auth::check() 为 true,就立刻重定向(默认跳转到 /home),不执行后续控制器逻辑。
- 典型用于
/login、/register、/password/reset等认证入口页 - 第三方 OAuth 回调地址(如
/auth/github/callback)也应加此中间件,否则已登录用户点击登录会直接跳走,无法完成账号绑定 - 不能加在
/logout上——登出操作本身要求用户处于登录态
它们不是万能开关,而是状态拦截器
两者都不处理登录/登出动作本身,也不校验密码、角色、策略或业务字段。它们只读取 Auth::check() 的布尔结果,做即时响应决策。真正的认证逻辑由 LoginController、Guard 实现,而授权(如能否编辑某条记录)需配合 Gate 或 Policy。


















