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

Laravel多租户下配置Fortify及实现租户会话与数据库连接持久化

解决方案

现有代码Bug修复

先修正两处明显的语法/逻辑错误:

  1. TenantManager的getTenant方法语法错误,将return $this-tenant;修改为:
public function getTenant(): ?Tenant
{
    return $this->tenant;
}
  1. IdentifyTenant中间件变量名错误,将租户加载成功后的逻辑修改为:
if ($this->tenantManager->loadTenant($pos !== false ? substr($host, 0, $pos - 1) : $host, $pos !== false)) {
    $tenant = $this->tenantManager->getTenant();
    Session::put('tenant', $tenant);
    
    // 加载租户后直接切换数据库连接,后续所有逻辑复用该配置
    config(['database.connections.tenant.database' => 'tenant_' . $tenant->id]);
    DB::purge('tenant');
    DB::reconnect('tenant');
    // 绑定租户用户模型默认连接为租户库
    \App\Models\Tenant\EndUser::setConnection('tenant');

    return $next($request);
}

1. 配置Laravel Fortify适配租户认证流程

修改config/fortify.php的基础配置,指定Fortify使用租户专属的guard和密码broker:

// 改用租户用户的guard
'guard' => 'end_user',
// 改用租户用户的密码重置broker
'passwords' => 'end_users',

修改完成后可以删除CreateNewEndUser中手动切换数据库的冗余代码,简化后的逻辑如下:

public function create(array $input)
{
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:tenant.end_users'],
        'password' => $this->passwordRules(),
        'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['required', 'accepted'] : '',
    ])->validate();

    return EndUser::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'password' => Hash::make($input['password']),
    ]);
}

额外说明:请确保App\Models\Tenant\EndUser模型的$connection属性设置为tenant,或没有硬写固定连接名。

2. 限定会话存储到租户专属sessions表

修改config/session.php配置,指定会话使用租户连接:

'connection' => 'tenant',

如果你的主站也需要使用session存储,可以在IdentifyTenant中间件的租户识别失败分支,动态将会话连接切回主库:

// 租户识别失败时,切回主库存储主站会话
config(['session.connection' => 'mysql']);
throw new NotFoundHttpException;

可选优化

如果需要租户侧的邮箱验证、密码重置链接自动绑定对应子域名,可以在对应通知类中动态拼接租户子域名即可,无需修改Fortify核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:03