我有一个为公司构建的标准Laravel应用程序。我现在将其制作为SAAS模型,但对最佳设置感到好奇。我肯定知道我希望每个公司都有自己的数据库来提高安全性,更轻松地获取特定客户数据的能力,并且由于这些公司都是竞争公司,因此可能只是一个更好的卖点。
我的问题是如何设置一个DB和子域来指向其特定的DB和应用程序设置,但是我真的不希望有100个子域,对于iOS应用程序,我需要一个单用户身份验证门户。
有没有一种特定的方法来拥有一个容纳所有laravel用户的数据库,并在登录时将其分配给他们的特定数据库?基本上,我只需要一个门户(身份验证位置)。
我知道这是通用的,但不确定在哪里发布或搜索。
设定:
用户数据库(标准laravel设置)
User | Password Reset | Migrations | Roles
公司数据库
accounts | routes
公司数据库
accounts | routes
最佳答案
您的应用程序有一个默认数据库。那是用户认证的地方。每个公司然后将其数据库详细信息存储在您的主数据库中。一旦有人进行身份验证,您就可以获取数据库详细信息并将其设置为默认数据库。
public function setDefaultConnection($company)
{
//update the config
config(['database.connections.mysql' => [
'host' => $company->host,
'username' => $company->username,
'password' => $company->password
]]);
//Check the credentials by calling PDO
try {
DB::connection()->getPdo();
} catch (\Exception $e) {
return redirect()->back()->withErrors(["connection" => "Could not connect to the database. Please check your input."]);
}
}
不确定这是最好的方法,但是它至少可以让您即时更改连接详细信息。
另一方面,您可以避免更新现有内容,而实际上可以动态添加新的
config(['database.connections.'.$company->id => [
'driver' => 'mysql',
'host' => $company->host,
'username' => $company->username,
'password' => $company->password
]]);
//Using it
$clients = DB::connection($company->id)->select(...);
关于php - Laravel多数据库,一个数据库存储用户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42822294/