Jetstream装完必须立刻做三件事:运行php artisan migrate建表、显式配置config/jetstream.php的features并清缓存、发布Sanctum配置且确保跨域设置正确。

Jetstream 不是装完就能跑的黑盒,它默认只生成骨架代码,漏掉任何一步都会导致登录页白屏、注册报错 404 或 API 静默 401。核心问题从来不是“怎么装”,而是“装完之后哪三件事必须立刻做”。
php artisan jetstream:install 命令必须带参数且不能跳过 migrate
这个命令只写文件、不建表。它依赖的 teams、user_teams、personal_access_tokens 表全靠你手动运行 php artisan migrate 创建。
- 漏掉迁移 → 注册时直接抛出
SQLSTATE[42S02]: Base table or view not found - 已跑过迁移但没清缓存 →
two_factor_secret字段为空,双因素开关点不动 - 用
--teams但没加在堆栈参数后 → 命令直接报错退出,比如php artisan jetstream:install --teams livewire是错的,必须是php artisan jetstream:install livewire --teams
config/jetstream.php 的 features 必须显式开启,否则功能等于不存在
Jetstream 默认只启用基础注册/登录,其他全是“关着的门”。config/jetstream.php 里的 'features' 数组不改,前端按钮不显示、后端逻辑不加载、数据库字段不写入。
-
Features::twoFactorAuthentication()没加 → 用户看不到「启用双重验证」按钮,two_factor_secret字段永远为空 -
Features::teams()没加 → 即使数据库有teams表,TeamController路由和策略也完全不注册 - 改完必须执行
php artisan config:clear,否则缓存会让新配置彻底失效
API 认证失败大概率是因为 Sanctum 配置没发布
Jetstream 内置 Sanctum,但它只注册服务提供者,不发布 config/sanctum.php。跨域请求(比如 Vue 前端调 /api/user)会静默 401,错误信息里几乎不提 Sanctum。
- 必须手动运行
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" - 发布后检查
.env中SANCTUM_STATEFUL_DOMAINS是否包含你的前端域名(如localhost:5173) - 如果用 Inertia,
VerifyCsrfToken中间件不能被绕过,否则 XHR 请求直接被拦
npm install && npm run build 缺一不可,哪怕你选的是 Livewire
Livewire 版本也依赖编译后的 app.css 和 app.js,因为 Jetstream 的 Blade 组件(比如 resources/views/auth/login.blade.php)引用了这些资源。不构建 = 页面样式崩、JS 事件不响应、表单提交无反应。
- Node.js 版本必须匹配:Laravel 10 要 ≥16.14,Laravel 11 要 ≥18.17,否则
npm install卡在@inertiajs/vue3 - Inertia 项目还多一个硬性要求:不跑
npm run build→resources/js/Pages/Auth/Login.vue根本不会渲染,页面空白 - 国内网络建议加镜像:
npm install --registry=https://registry.npmmirror.com
最常被忽略的其实是顺序:先 migrate,再改 config/jetstream.php 并 config:clear,最后 npm run build。中间穿插任何一步缓存没清、密钥没生成(php artisan key:generate)、或 Sanctum 配置漏发,都会让整个认证流程卡在某个静默失败点上。


















