Ошибка при попытке аутентификации пользователя с помощью Auth :: попытки в Laravel 5.8 - PullRequest
1 голос
/ 08 июля 2019

Приложение использует разные базы данных для каждой компании.

Аутентификация получает имя пользователя (не адрес электронной почты) типа 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, но ошибка не позволяет вернуться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...