Sanctum 是 laravel 官方推荐的轻量级 API 认证方案,专为 SPA 设计,基于 Token + csrf 实现无状态认证;需安装配置、执行迁移、设置 API guard;登录分三步:获取 CSRF cookie、提交凭证并生成 token、前端携带 Bearer Token 请求;路由用 auth:sanctum 中间件保护;登出须后端销毁 token 并前端清理。

Sanctum 是 Laravel 官方推荐的轻量级 API 认证方案,特别适合 SPA(单页应用)场景——它不依赖 session cookie 的传统 Web 认证,而是通过 token + CSRF 保护实现安全、无状态的前后端分离登录。
一、安装与基础配置
在 Laravel 项目中执行:
- composer require laravel/sanctum
- php artisan vendor:publish –provider=”LaravelSanctumSanctumServiceProvider”
- php artisan migrate(生成 personal_access_tokens 表)
然后在 app/Providers/AuthServiceProvider.php 的 boot() 方法中添加:Sanctum::usePersonalaccessTokenModel(PersonalAccessToken::class);(可选,若自定义 Token 模型)
并在 config/auth.php 中确保 'api' guard 使用 'sanctum' driver。
二、SPA 登录流程(关键三步)
前端(如 vue/react)向后端发起登录请求时,需配合 Laravel 的 CSRF 机制:
- 先 GET /sanctum/csrf-cookie:触发服务端设置
XSRF-TOKENcookie(前端自动携带) - 再 POST /login:提交邮箱/密码,后端验证成功后调用
Auth::attempt(),再用auth()->user()->createToken('spa')->plainTextToken生成 token - 响应中返回 token(不存 cookie):前端将其存在 localStorage 或 pinia/vuex 状态中,后续所有 API 请求在
Authorization: Bearer {token}头中携带
三、API 路由保护与用户获取
在 routes/api.php 中使用 middleware('auth:sanctum'):
Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth:sanctum');- 注意:Sanctum 的
auth:sanctum中间件会自动识别 Bearer Token 或已认证的 Web session(兼容 SSR 场景) - 若仅限 SPA,建议显式禁用 session 驱动,避免混淆;可在中间件组中排除
web中间件
四、登出与 Token 管理
登出不是清空前端 token 就完事,必须通知后端销毁对应 token:
- 前端发送 delete 请求到
/logout(需带 token) - 后端处理:
auth()->user()->currentAccessToken()->delete(); - 如需批量注销所有设备,用
auth()->user()->tokens()->delete(); - 前端收到成功响应后,再清除本地存储的 token 和用户信息
基本上就这些。Sanctum 对 SPA 友好,不强制刷新 token、不依赖 redis、开箱即用,只要注意 CSRF 初始化和 token 生命周期管理,就能稳住前后端身份链路。
以上就是Laravel如何使用Sanctum进行API认证?(SPA实战)的详细内容,更多请关注php中文网其它相关文章!