Приложение использует разные базы данных для каждой компании.
Аутентификация получает имя пользователя (не адрес электронной почты) типа username @ company, где после разнесения company является псевдонимом для поиска компании в базе данных приложения по умолчанию и получения данных конкретной базы данных. После подключения к этой конкретной базе данных имя пользователя используется для входа в приложение. При попытке войти я получаю сообщение об ошибке.
$credentials = [
'username' => $username, // string
'password' => $password, // string
'active' => 1
];
if (Auth::attempt($credentials)) { // <-- The error originates here
//...
}
Получена ошибка:
ErrorException (E_WARNING)
substr () ожидает, что параметр 1 будет строкой, а массив задан
Ошибка сообщается в:
\ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Str.php line 143
Я понимаю, что пароль должен быть отправлен без хэша, но применение хэша не дало результата.
class UserController extends Controller
{
public function login()
{
return view('auth.login');
}
public function authenticate(Request $request)
{
$request->validate([
'username' => 'required|string',
'password' => 'required|string',
]);
$data = explode('@', $request->username);
$username = $data[0];
$company = $data[1];
$client = SysClient::where('company', $company)->first();
// database data connection
$connection = [
"driver" => $client->driver,
"host" => $client->host,
"port" => $client->port,
"database" => $client->database,
"username" => $client->username,
"password" => $client->password,
"unix_socket" => $client->unix_socket,
"charset" => $client->charset,
"collation" => $client->collation,
"prefix" => $client->prefix,
"prefix_indexes" => $client->prefix_indexes,
"strict" => $client->strict,
"engine" => $client->engine
];
$request->session()->put('database.default', $client->database);
\Config::set('database.connections.' . $cliente->database, $connection);
$db = \Config::get('database.connections.' . $cliente->database);
if($db) {
\Config::set('database.default', $db);
} else {
//...
}
$credentials = [
'username' => $username, // string
'password' => $password, // string
'active' => 1
];
Up to this line, everything is fine.
The problem comes now ...
if (Auth::attempt($credentials)) { // <-- The error originates here
// Authentication passed...
return redirect()->intended('/target');
} else {
//...
}
}
Мне просто нужно вернуть Auth :: попытки обратно, true или false, но ошибка не позволяет вернуться.