跳转到主要内容

什么是认证

认证(Authentication)指的是确认访问用户「是谁」的机制。 在 Web 应用中,通常是通过登录表单接收邮箱和密码,若匹配成功就把用户信息保存到 Session 中。 之后的请求就通过该 Session 识别用户。 Laravel 的认证功能由「守卫(Guard)」和「Provider(用户提供者)」两个概念组成。
  • 守卫:定义在每个请求中如何认证用户。默认使用 session 守卫,通过 Session 与 Cookie 管理状态。
  • Provider:定义如何从数据源中取出用户。默认使用 Eloquent。
认证的配置文件是 config/auth.php。默认设置就足以覆盖大多数 Web 应用。

通过启动套件搭建认证

在 Laravel 中,只需在通过 laravel new 创建应用时选择启动套件,就会自动构建登录、注册、密码重置等认证功能。这是最推荐的方式。
1

创建应用

使用 Laravel 安装器创建应用,过程中会有选择启动套件的提示。
启动套件可以从 ReactVueLivewireSvelte 中选择。 请结合团队的技术栈来选。
2

安装前端依赖

3

准备数据库

确认 .env 中的数据库配置后运行迁移。
包含 users 表的初始迁移会被应用。
4

启动开发服务器

在浏览器中访问 http://localhost:8000,导航栏会显示「Register」与「Log in」链接。 可以访问 /register 试着注册用户。
使用启动套件后,你立即拥有以下功能:
启动套件生成的所有代码(控制器、路由、视图)都存在于你自己的应用中,可以自由地修改和定制。

可用的启动套件

React

采用 React 19、TypeScript、Tailwind 及 shadcn/ui,可构建现代化 SPA。 通过 Inertia,可以在保留服务端路由的同时使用 React 前端。

Vue

采用 Vue Composition API、TypeScript、Tailwind 与 shadcn-vue。 同样使用 Inertia 与服务端连接。

Livewire

使用 Livewire,只需 PHP 就能构建动态 UI。 适合以 Blade 模板为主的团队,或希望不使用 JavaScript 框架的场景。 内置 Flux UI 组件库。

Svelte

采用 Svelte 5、TypeScript、Tailwind 与 shadcn-svelte。 结合 Inertia 可构建现代化 SPA。

认证门面

使用 Auth 门面可以获取当前已认证用户的信息或判断认证状态。

获取已认证用户

在控制器中也可以从 Request 对象获取用户。

判断认证状态

Auth::check() 会以 true / false 返回用户是否已登录。
在 Blade 模板中,使用 @auth@guest 指令会更方便。

路由保护

要创建只允许已登录用户访问的路由,请使用 auth 中间件。
未认证用户访问时会自动被重定向到 /login 要一次性保护多个路由,可使用分组。
忘加 auth 中间件会让未登录用户也能访问。需要保护的路由请务必加上。

仅访客路由

要将已登录用户重定向到别处,可使用 guest 中间件。 对登录和注册页面使用它,可以把已登录用户直接跳转到仪表盘。

手动认证

不使用启动套件、手动实现登录时可使用 Auth::attempt()
Auth::attempt() 的第一个参数是凭据数组。 密码会自动与哈希比对,因此直接传入明文即可。 要实现「记住登录状态」功能,把 true 作为第二个参数传入。
即使自己实现认证,也建议参考启动套件的代码——它是安全实现的好范本。

登出

要登出用户,请调用 Auth::logout()。 最佳实践是同时使 Session 失效并重新生成 CSRF 令牌。
路由使用 POST 方法。
Blade 模板中通过表单发送 POST 请求。

小结

下一步

中间件

详细了解 auth 中间件的机制及如何编写自定义中间件。
最后修改于 2026年7月18日