Laravel如何使用Sanctum进行API认证?(SPA实战)
发布时间 - 2025-12-16 00:00:00 点击率:次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="Laravel\Sanctum\SanctumServiceProvider"
- 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生成 token
')->plainTextToken -
响应中返回 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 生命周期管理,就能稳住前后端身份链路。
# php
# vue
# react
# laravel
# redis
# 前端
# go
# composer
# cookie
# app
# access
# 中间件
# csrf
# require
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何打造高效商业网站?建站目的决定转化率
Angular 表单中正确绑定输入值以确保提交与验证正常工作
新三国志曹操传主线渭水交兵攻略
微信h5制作网站有哪些,免费微信H5页面制作工具?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
微信小程序 canvas开发实例及注意事项
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何用美橙互联一键搭建多站合一网站?
如何在腾讯云服务器上快速搭建个人网站?
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel Docker环境搭建教程_Laravel Sail使用指南
使用Dockerfile构建java web环境
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Python3.6正式版新特性预览
javascript基本数据类型及类型检测常用方法小结
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
微信公众帐号开发教程之图文消息全攻略
如何快速查询域名建站关键信息?
如何选择PHP开源工具快速搭建网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
深圳网站制作培训,深圳哪些招聘网站比较好?
EditPlus 正则表达式 实战(3)
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel中的Facade(门面)到底是什么原理
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Laravel如何自定义错误页面(404, 500)?(代码示例)
如何快速搭建高效简练网站?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
使用C语言编写圣诞表白程序
HTML 中动态设置元素 name 属性的正确语法详解
EditPlus中的正则表达式 实战(4)
Linux系统运维自动化项目教程_Ansible批量管理实战
Android okhttputils现在进度显示实例代码
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Android中AutoCompleteTextView自动提示
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
如何在云主机上快速搭建网站?
香港服务器租用费用高吗?如何避免常见误区?
Laravel如何使用Blade组件和插槽?(Component代码示例)


')->plainTextToken