ユーザログイン後にデータベース接続を実行時に変更したい。私はConfig Facadeのメソッドセットを使用します。ミドルウェアまたはコントローラのコンストラクタでのみ使用できることはわかっています。だから私はこれらの実行時のLaravelデータベースパラメータの変更
Route::get("login", "[email protected]");
Route::group(["middleware" => "test"], function() {
Route::post("login", "[email protected]");
});
を作成した。そして、私はログインが提出した後に呼ばれる「テスト」ミドルウェアを作成:
public function handle($request, Closure $next) {
// Validazione dei dati
$validator = Validator::make($request->all(), [
"codice_azienda" => "required",
"username" => "required",
"password" => "required"
]);
if ($validator->fails()) {
return redirect()->back()->withInput()->withErrors($validator);
}
// Verifico i dati immessi
$codice_azienda = $request->get("codice_azienda");
$username = $request->get("username");
$password = $request->get("password");
$objOperatore = new Operatore();
$cliente = $objOperatore->loginOperatore($codice_azienda, $username, $password);
if (empty($cliente)) {
throw new \App\Exceptions\LoginFailedException;
}
Config::set("DB_HOST", Crypt::decrypt($cliente->Server));
Config::set("DB_DATABASE", $cliente->NomeDB);
Config::set("DB_USERNAME", Crypt::decrypt($cliente->Username));
Config::set("DB_PASSWORD", Crypt::decrypt($cliente->Password));
$operatori = Operatore_Model::all();
\App\Http\Controllers\Log_Controller::debug($operatori, true);
return $next($request);
}
しかし、すべての(metoed)Operatore_Modelの何
ログを返しません。
"[2017-02-16 16:44:52] local.ERROR: exception 'PDOException' with message 'SQLSTATE[42S02]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Invalid object name 'Operatori'.' in C:\xampp\htdocs\dashboard\www\e730\vendor\laravel\framework\src\Illuminate\Database\Connection.php:323"
私は、顧客ごとに1つのマルチDB接続を使用します。
もし私が提案をするかもしれません。あなたは、このロジックをイベント 'auth.login'のリスナーに入れれば、自分で簡単にすることができます。その場合、 'LoginFailedException'を投げたり、ユーザー名とパスワードを検証したりすることを心配する必要はありません。 – user3158900