laravel Sanctum通过session机制为SPA提供轻量认证。1. 安装并发布配置文件,运行迁移;2. 配置CORS允许前端域名携带cookie;3. 前端先获取csrf Token再登录;4. 用auth:sanctum中间件保护API;5. 登出时清除session。关键在于正确配置跨域和CSRF处理。

Laravel Sanctum 为单页应用(SPA)与 Laravel 后端 API 提供简单、轻量的认证机制,无需传统的 API token 或 OAuth。它结合了 Laravel 的 session 认证机制和跨域支持,让 SPA 能安全地调用后端 API。
1. 安装并配置 Sanctum
composer require laravel/sanctum
发布 Sanctum 的配置和迁移文件:
php artisan vendor:publish –provider=”LaravelSanctumSanctumServiceProvider”
运行迁移以创建 sessions 表(用于记录用户登录状态):
在 app/http/Kernel.php 中确保 EnsureFrontendRequestsAreStateful 中间件已注册到 api 中间件组中,这是支持 SPA 跨域请求的关键:
'api' => [ IlluminateHttpMiddlewareEnsureFrontendRequestsAreStateful::class, 'throttle:api', IlluminateRoutingMiddlewareSubstituteBindings::class, ],
2. 配置跨域(CORS)
确保前端域名被允许携带 cookie 发起请求。修改 config/cors.php:
'paths' => ['sanctum/csrf-cookie', 'api/*'], 'supports_credentials' => true, 'allowed_origins' => ['http://localhost:3000'], // 前端地址
这允许前端获取 CSRF cookie 并保持会话状态。
3. 用户登录与认证流程
Sanctum 使用 Laravel 默认的 session 认证方式。你需要提供登录接口:
use IlluminateHttpRequest; use IlluminateSupportFacadesAuth; public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { return response()->json(['message' => '登录成功']); } return response()->json(['message' => '凭证错误'], 401); }
前端必须先访问 /sanctum/csrf-cookie 接口来获取 CSRF token:
axios.get('/sanctum/csrf-cookie');
然后才能提交登录请求,避免 CSRF 校验失败。
4. 保护 API 路由
使用 auth:sanctum 中间件保护需要认证的 API:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
只要用户已登录且 session 有效,该接口就会返回当前用户信息。
注意:由于是基于 session 的认证,用户关闭浏览器或 session 过期后需要重新登录。
5. 登出操作
登出时清除 session 并可选地使 token 失效(如果也用了 token):
use IlluminateHttpRequest; public function logout(Request $request) { Auth::guard('web')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return response()->json(['message' => '已退出']); }
基本上就这些。Laravel Sanctum 为 SPA 提供了一种简洁、安全的认证方式,无需管理 token,适合同域或可信跨域场景。关键点在于正确配置 CORS 和确保前端获取 CSRF cookie。不复杂但容易忽略细节。
以上就是Laravel Sanctum怎么为SPA应用提供API认证的详细内容,更多请关注php中文网其它相关文章!