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

Laravel 11/12中Sanctum多用户模型SPA认证方案选型咨询

Laravel多SPA认证方案选择建议

针对你提到的同域名下两个Angular SPA(admin/client子域名)对接Laravel API的认证需求,结合两个方案的特点,给你具体分析和建议:

方案1:单User模型+关联专属表

优势

  • 完全匹配Laravel Sanctum SPA认证的官方流程,无需额外配置认证守卫,上手快,踩坑少
  • 共享User模型的基础认证逻辑(如密码重置、邮箱验证),减少重复代码编写
  • 会话管理统一,不用区分不同守卫的会话存储规则

劣势

  • User表会逐渐冗余,随着Admin/Client专属字段增多,表结构会变得臃肿、不清晰
  • 权限校验依赖type字段判断,业务代码中容易出现遗漏,比如接口忘记校验用户类型导致越权
  • 后续若要给Admin/Client做独立的认证规则(如不同登录方式、token有效期),扩展难度大

方案2:独立认证守卫+多用户模型

优势

  • 架构清晰,AdminUser和ClientUser完全隔离,各自的字段、业务逻辑互不干扰
  • 权限控制更严谨,通过守卫直接区分用户类型,无需在业务代码中额外做判断
  • 扩展性强,后续可给不同守卫配置不同的认证驱动、会话有效期、密码规则等

劣势

  • 需要手动配置config/auth.php的守卫和提供者,官方没有一步到位的完整示例,需自行梳理流程
  • 基础认证逻辑(如密码重置)需在两个模型中分别实现,或封装成Trait复用
  • 需确保Sanctum的stateful配置包含两个子域名,保证Cookie跨子域名共享正常

决策建议

  • 如果你的项目业务逻辑简单,Admin和Client的认证流程、权限规则差异不大,优先选方案1,快速落地,减少配置成本
  • 如果你的项目Admin和Client业务完全独立,后续有明确的扩展需求(如不同登录方式、独立权限体系),建议选方案2,初期配置稍麻烦,但后期维护成本低,架构更健壮

方案2核心配置示例

修改config/auth.php

'guards' => [
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    'client' => [
        'driver' => 'session',
        'provider' => 'clients',
    ],
],

'providers' => [
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\AdminUser::class,
    ],
    'clients' => [
        'driver' => 'eloquent',
        'model' => App\Models\ClientUser::class,
    ],
],

登录控制器中指定守卫

// Admin登录逻辑
if (Auth::guard('admin')->attempt($request->only('email', 'password'))) {
    // 登录成功后的处理
    return response()->json(['message' => 'Admin login success']);
}

// Client登录逻辑
if (Auth::guard('client')->attempt($request->only('email', 'password'))) {
    // 登录成功后的处理
    return response()->json(['message' => 'Client login success']);
}

配置Sanctum跨子域名会话

修改config/sanctum.php,确保stateful包含两个子域名:

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
    '%s%s',
    'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
    env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
)) . ',admin.yourdomain.com,client.yourdomain.com'),

内容的提问来源于stack exchange,提问作者Nelize du Toit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:28:26