I manually authenticate users on login, here is my full Login function
public function Login(Request $request)
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
$email_host = explode('@', $credentials['email'])[1];
$company = Companies::where('email_host', $email_host)->first();
if ($company) {
try {
// Set up dynamic database configuration
Config::set("database.connections.$company->email_host", [
'driver' => $company['db_driver'],
'host' => $company['db_host'],
'port' => $company['db_port'],
'database' => $company['db_name'],
'username' => $company['db_user'],
'password' => $company['db_password'],
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
]);
Config::set("database.default", $company->email_host);
DB::purge();
DB::reconnect();
$user = User::where('email', $credentials['email'])->first();
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
$user = Auth::user();
session([
'username' => $user->username,
'company_id' => $user->company_id,
'warehouse' => $user->warehouse,
'company_database' => serialize($company),
]);
if ($user->role == 'basic') {
return redirect('/users/vaccations/set-vaccation');
}
return redirect()->intended('/');
}
} catch (Exception $e) {
// Error occurred while configuring the database connection
return back()->withErrors([
'email' => 'Error occurred while configuring the database connection: ' . $e->getMessage(),
])->onlyInput('email');
}
} else {
// Company not found
return back()->withErrors([
'email' => 'The provided email does not belong to a valid company.',
])->onlyInput('email');
}
}
the problem is in Auth::attempt(). First, i select db credentials, from master db, than i switch db, and procced to login user, but Auth seem to be using first(default, master) db. How do i fix this? In env i only have one db credentials(master), other db credentials are stored in master db as mentioned above.