本地启动 Laravel API 项目前必须确认三件事:生成 APP_KEY、正确配置 DB_CONNECTION、开启 APP_DEBUG;路由不生效需检查 api.php 入口和中间件绑定;419 错误多因请求进错路由组或误加 CSRF 中间件。

本地启动 Laravel API 项目前必须确认的三件事
不是装完 laravel/installer 就能跑 API——漏掉任一环节,php artisan serve 启动后请求直接 500 或返回空白页。
-
APP_KEY没生成:运行php artisan key:generate,否则Encrypter初始化失败,所有带加密/Session 的中间件崩掉 -
DB_CONNECTION配置错成sqlite却没建database/database.sqlite文件:报错SQLSTATE[HY000] [14] unable to open database file - 没关
APP_DEBUG=false就上线测试:API 返回完整异常堆栈(含路径、环境变量),属于安全泄漏
Laravel API 路由不生效?检查 api.php 和中间件绑定
写在 routes/api.php 里的路由 404,大概率是没走对入口或中间件拦截了请求。
- 确保
app/Providers/RouteServiceProvider.php中mapApiRoutes()方法被调用,且prefix是'api'(默认值) -
api路由组默认绑定了throttle:api和auth:sanctum(Laravel 9+),未登录或未配 Sanctum 会直接 401;临时调试可注释掉middleware('auth:sanctum') - 别把 API 路由写进
web.php:它带web中间件(含 session、CSRF),API 请求无 cookie 时必然 419
Postman 测试返回 419?别急着改 CSRF,先看请求头和中间件
419 不等于 CSRF 失败,尤其在 API 场景下,它更可能是认证或中间件配置误伤。
- 确认请求 URL 是
/api/xxx(不是/xxx),否则进了web路由组,触发 CSRF 验证 - API 路由默认不校验 CSRF,但如果你手动给
api路由加了VerifyCsrfToken中间件,就会强制校验——删掉它 - 用 Postman 时,
Content-Type设为application/json,别用表单提交(application/x-www-form-urlencoded)混用,Laravel 对 JSON 请求自动跳过 CSRF
开发时想快速验证接口逻辑,绕过 Sanctum 认证的两种安全做法
刚写完一个 POST /api/posts,不想立刻搭登录流程,但又不能直接删中间件——否则上线后留后门。
- 在
app/Http/Controllers/Controller.php基类里加个开关:protected $skipAuth = false;,然后在具体控制器方法开头加if (app()->environment('local') && $this->skipAuth) return; - 更推荐:在
app/Http/Kernel.php的$middlewareGroups['api']里,把auth:sanctum替换为自定义中间件,例如CheckApiAuth::class,里面只在非local环境才执行真实校验
真正容易被忽略的是:Laravel 的 API 认证不是“开个开关”就完事,它和跨域(CORS)、Token 存储方式(数据库 vs Redis)、前端请求头(Authorization: Bearer xxx)强耦合,调通一个接口不等于整套链路稳了。










