You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目API+Web双认证(Sanctum+Cookie)整合方案咨询

Sanctum 本身内置同域名下的 Session Cookie 认证能力,和 Laravel 默认的 web 守卫共享底层 Session 存储,只需做少量配置即可实现两端认证状态互通。


1. 核心配置调整

  • 修改 config/sanctum.php 中的 stateful 配置项,加入你的应用全域名(含端口,本地开发示例:localhost:8000, 127.0.0.1:8000),Sanctum 会自动对这些域名的请求启用 Session 校验逻辑
  • 修改 config/cors.php:
    • paths 数组加入 api/* 和 sanctum/csrf-cookie
    • supports_credentials 设为 true,确保跨域场景下 Cookie 可正常传递
  • 路由配置无需大改:routes/api.php 下的管理后台路由统一用 auth:sanctum 中间件包裹,routes/web.php 下的根路径应用路由保持默认 auth 中间件即可

2. 统一登录逻辑实现

不需要维护两套登录体系,任意一端登录成功后另一端会自动识别认证状态:

  • 如果你通过 API 接口实现管理员登录:
    1. 登录请求前先调用 /sanctum/csrf-cookie 接口初始化 CSRF 令牌,该接口会自动写入 XSRF-TOKEN Cookie
    2. 登录接口中校验账号密码通过后,调用 Auth::attempt($credentials) 写入 Session,Laravel 会自动返回 Session Cookie
  • 如果你通过 Web 端表单登录:登录成功后生成的 Session 会被 Sanctum 自动识别,请求 /api/** 接口时无需额外传入 Token
  • 客户端发起 API 请求时需开启凭证携带(Axios 示例:配置 withCredentials: true),确保浏览器自动带上 Cookie 信息

3. 状态同步与退出

  • 两端认证状态完全互通:Web 视图中调用 Auth::check() 和 API 接口中调用 auth('sanctum')->check() 会返回完全一致的结果
  • 退出逻辑统一调用 Auth::logout() 即可销毁 Session,两端认证状态会同时失效

4. 多角色适配(可选)

如果管理员和普通 Web 端用户分属不同用户表,只需额外做以下配置:

  • 在 config/auth.php 中新增管理员专属的守卫与用户提供者
  • 管理员专属 API 路由组使用 auth:sanctum:你的管理员守卫名 中间件,Web 端管理员路由使用 auth:你的管理员守卫名 中间件即可,Session 仍会自动共享不冲突

常见问题排查

  • 本地多端口开发时,将 .env 中的 SESSION_DOMAIN 设为根域名(示例:.localhost),确保 Cookie 在不同端口下可共享
  • 不要使用 Sanctum 的 API Token 模式调用接口,必须走 Cookie 模式才能和 Web 守卫共享登录态

内容的提问来源于stack exchange,提问作者Reekavitcha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:09:03