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

多租户Laravel(Tenancy for Laravel)下Sanctum子域无法正常工作

解决Laravel Tenancy子域环境下Sanctum无法正常工作的配置方案

核心环境变量配置

直接在.env文件中设置通配符格式的域名参数,让所有子域能共享会话和Sanctum状态:

  • 设置SESSION_DOMAIN为主域的通配符,开头必须带点:
    SESSION_DOMAIN=.yourdomain.com
    
  • 设置SANCTUM_STATEFUL_DOMAINS包含主域和所有子域,支持通配符:
    SANCTUM_STATEFUL_DOMAINS=yourdomain.com,*.yourdomain.com
    
    本地开发时可追加前端地址,比如localhost:3000。

动态适配多租户场景(可选)

如果需要根据当前租户的子域动态调整配置,可在AppServiceProvider的boot方法中添加租户钩子:

use Illuminate\Support\Facades\Config;
use Stancl\Tenancy\Facades\Tenancy;

public function boot()
{
    Tenancy::hook('tenant:initialized', function ($tenant) {
        // 获取当前租户的根域名
        $domain = $tenant->domains->first()->domain;
        $rootDomain = substr($domain, strpos($domain, '.') + 1);
        
        // 动态覆盖会话和Sanctum配置
        Config::set('session.domain', '.' . $rootDomain);
        Config::set('sanctum.stateful', [
            $domain,
            $rootDomain,
            '*.' . $rootDomain
        ]);
    });
}

关键注意事项

  • 调整config/session.php中的same_site配置:跨域场景设为'none',同域设为'lax';生产环境需确保secure为true。
  • 配置修改后必须清除缓存:
    php artisan config:clear
    php artisan cache:clear
    
  • SPA应用需确保请求携带withCredentials标识,否则Cookie无法正常传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:01:42