Laravel 12 中 Sanctum 接口鉴权核心是“登录发 Token + 请求带 Bearer + 路由加 auth:sanctum 中间件”,轻量易控,适配多端;需安装、迁移、配置用户模型并实现登录返回 plainTextToken,API 路由必须使用 auth:sanctum 中间件校验。

在 Laravel 12 中用 Sanctum 给平台 API 做接口鉴权,核心是“登录发 Token + 请求带 Bearer + 路由加中间件”。它不依赖 JWT 或复杂 OAuth 流程,轻量、易控、适合中后台系统和多端(Web/APP/第三方)调用。
安装与基础配置
确保 Sanctum 已正确集成:
- 执行
composer require laravel/sanctum - 发布配置和迁移:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" - 运行迁移:
php artisan migrate(生成personal_access_tokens表) - 检查
config/sanctum.php,若为纯 API 场景(无 SPA 同域会话),保持默认即可,无需启用stateful域名配置
用户模型与登录接口
Token 必须由已认证用户生成,不能脱离登录流程:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 在
app/Models/User.php中引入 trait:use Laravel\Sanctum\HasApiTokens; - 写一个标准登录接口(如
AuthController@login):
先Auth::attempt()验证账号密码 → 再调用$user->createToken('api')->plainTextToken→ 立刻返回明文 token(plainTextToken只能读一次) - 示例响应格式:
{"access_token": "abcdef123456...", "token_type": "Bearer"}
保护 API 路由
所有需鉴权的接口必须套用 auth:sanctum 中间件:
- 在
routes/api.php中定义:
Route::middleware('auth:sanctum')->group(function () {<br> Route::get('/profile', [ProfileController::class, 'show']);<br> Route::post('/order', [OrderController::class, 'store']);<br>}); - 注意:不是
sanctum.auth,也不是auth,必须是auth:sanctum - 中间件会自动从请求头
Authorization: Bearer xxx提取 token,并查库比对tokenable_id、tokenable_type和abilities
前端调用与注意事项
客户端必须严格遵循格式,否则 401 是常态:
- 登录后保存 token(如 localStorage),后续每个请求 header 加:
Authorization: Bearer abcdef123456...(Bearers 后必须有一个空格) - 若调用方是跨域(如 Vue 前端跑在
http://localhost:5173),而 Laravel 在:8000:
– 不需要配SANCTUM_STATEFUL_DOMAINS(那是 SPA 同域会话用的)
– 只需确保请求带 token,且后端 CORS 允许该源(用fruitcake/laravel-cors或原生配置) - 不要尝试手动设置
X-Sanctum-Token请求头——原生 Sanctum 完全不识别它

















