Laravel如何使用Sanctum进行API认证?(SPA实战)

3次阅读

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

Laravel如何使用Sanctum进行API认证?(SPA实战)

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.phpboot() 方法中添加:
Sanctum::usePersonalaccessTokenModel(PersonalAccessToken::class);(可选,若自定义 Token 模型)
并在 config/auth.php 中确保 'api' guard 使用 'sanctum' driver。

二、SPA 登录流程(关键三步)

前端(如 vue/react)向后端发起登录请求时,需配合 Laravel 的 CSRF 机制:

  • 先 GET /sanctum/csrf-cookie:触发服务端设置 XSRF-TOKEN cookie(前端自动携带)
  • 再 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')

Laravel如何使用Sanctum进行API认证?(SPA实战)

AI Code Reviewer

AI自动审核代码

Laravel如何使用Sanctum进行API认证?(SPA实战) 112

查看详情 Laravel如何使用Sanctum进行API认证?(SPA实战)

  • 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中文网其它相关文章!

text=ZqhQzanResources