【发布时间】:2017-04-24 00:21:31
【问题描述】:
在config/database.php 我有两个连接:mysql 和website。两者都连接到同一台主机,只是数据库不同。默认为mysql。
我创建了一个名为SetupWebsite 的中间件,它检查传入域是否存在于默认连接中的数据库中。如果是这样,它将使用以下代码使用正确的数据库填充website 连接:
config(['database.connections.website.database' => $database]);
然后,它将默认连接切换到website:
config(['database.default' => 'website']);
我通过从数据库中检索一个仅存在于website 连接中的值来验证默认连接现在是website。我还可以登录到website 连接中的用户帐户。现在,当我设置以下路线时:
Route::get('admin', function () {
return 'Welcome to the dashboard!';
})->middleware('auth');
我在成功登录后去那里,我收到“tbl_users 不存在”的错误消息,我看到它使用mysql 连接来检查用户是否经过身份验证。我想不出如何告诉 Laravel 我正在使用另一个数据库连接。 FIY:我没有缓存配置。
更新
当我将以下代码添加到Illuminate\Auth\Middleware\Authenticate::class的构造函数中时:
DB::setDefaultConnection('website');
我收到未选择数据库的错误消息,这意味着在我的 SetupWebsite 中间件发挥作用之前“创建”了身份验证中间件。有什么建议可以解决这个问题吗?
【问题讨论】:
标签: php laravel laravel-middleware