Jetstream 是 Fortify 的 UI 封装层而非替代品;选择本质是决定是否需要现成前端及团队/2FA/API token 等功能:Fortify 无 UI,需手动实现路由、视图与认证逻辑;Jetstream 自动集成 Fortify 并预置完整前端与高级功能。

Jetstream 是 Fortify 的 UI 封装层,不是替代品;选 Jetstream 还是 Fortify,本质是在选“要不要现成前端+团队/2FA/API token 等功能”。
Jetstream 安装后默认启用 Fortify,但你不能绕过它改认证逻辑
运行 php artisan jetstream:install livewire 时,Jetstream 会自动发布 fortify.php 配置、注册 FortifyServiceProvider,并把所有登录/注册等请求交由 Fortify 处理。这意味着:
- 你删掉
app/Http/Controllers/Auth下的控制器也没用——Fortify 已接管路由和中间件 - 想改注册流程?必须重写
App\Actions\Fortify\CreateNewUser,而不是修改某个 Controller 方法 -
Fortify::authenticateUsing()是唯一入口点,Breeze 那种直接改LoginController的方式在这里不生效
Fortify 单独用时,连登录页都要你自己写
Fortify 只提供认证动作类(CreateNewUser、ResetPassword)、中间件(auth:sanctum)、数据库迁移(personal_access_tokens),但不生成任何视图或 Web 路由。常见踩坑点:
- 没手动加
Route::get('/login', function () { return view('auth.login'); });→ 访问 /login 直接 404 - 忘了在
config/fortify.php中启用Features::login()→Fortify::authenticateUsing()根本不会被调用 - 启用了
Features::twoFactorAuthentication()却没实现 QR 码渲染逻辑 → 登录后卡在空白页,控制台无报错
Jetstream 的“开箱即用”功能有硬依赖,关不掉就白占资源
Jetstream 默认建表包括 teams、team_user、personal_access_tokens,且控制器和 Blade 组件里大量硬编码引用 $user->currentTeam 或 Auth::user()->tokens()。如果后期想禁用团队功能:
- 删掉
teams表迁移?不行,Jetstream 的TeamInvitationController会抛出SQLSTATE[42S02]: Base table or view not found - 只注释
Features::teams()?前端 Profile 页面仍会尝试加载团队下拉框,JS 报错Cannot read property 'name' of null - 想彻底移除 Sanctum token 管理?得手动删掉
resources/views/profile/api-tokens-manager.blade.php和对应路由,否则点击 “API Tokens” 仍跳转 404
Fortify 更适合 API 项目,Jetstream 更适合快速交付管理后台
Fortify 没视图、没前端栈绑定,天然适配 Vue SPA + Sanctum、React Native App 或纯 Postman 测试场景;Jetstream 则强制绑定 Livewire/Inertia,如果你的项目已有 Vue Router 或需要 SSR 支持,它的组件结构反而会成为负担。真正容易被忽略的是:
- Jetstream 的 Livewire 版本默认开启
Alpine.js+WireDirectives,若你已在全局引入不同版本的 Alpine,页面交互会静默失效 - Fortify 的
password_confirmed中间件依赖 session,但在无 Cookie 的 API 场景下必须配合sanctum中间件重写逻辑,否则ConfirmablePasswordResponse永远返回 403 - 两者都用
laravel/sanctum,但 Jetstream 自动注册SanctumServiceProvider,Fortify 需手动php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"


















