Я работаю с двумя проектами Laravel: Project One и Project Two, работающими на моем локальном хосте. Первый проект выполняет вызовы API к Проекту два. Оба проекта используют отдельные базы данных MySQL, при этом Проект второй настроен на использование соединения, отличного от стандартного, с именем mysql_oth в config/database.php. Однако когда Project One выполняет вызов API к Project Two, Project Two пытается использовать соединение с базой данных mysql по умолчанию (Project one) вместо mysql_oth. Эта проблема не возникает при отправке запросов к Проекту два напрямую через Postman; в этом случае используется правильное соединение mysql_oth.
Вот что я проверил на данный момент:
- Соединение mysql_oth правильно настроено в Проекте 2
config/database.php. - Direct вызовы конечной точки API Project Two из
Postman правильно используют соединение mysql_oth. - Проблема возникает только тогда, когда Project One выполняет вызов API к Project Two; каким-то образом это приводит к тому, что Второй проект возвращается к соединению mysql по умолчанию (Первый проект). Я
- Я очистил конфигурацию, маршрут и кеш Laravel с помощью ремесленных
команд в обоих проектах.
Код: Выделить всё
$request->authenticate();
$request->session()->regenerate();
$response = Http::post('http://localhost:82/laravel/project_2/api/appLogin', [
'email' => $request->email,
'password' => $request->password,
])->throw();
if ($response->successful()) {
$token = $response->json('token');
$request->session()->put('apptoken', $token); // Save token in session
return redirect()->intended(RouteServiceProvider::HOME);
} else {
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect(url('login'))->withErrors(['email' => 'The provided credentials are incorrect -- .']);
}
Код: Выделить всё
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
Log::info('API call sent', [
'method' => request()->method(),
'url' => request()->url(),
'data' => request()->all(),
]);
if (Auth::attempt($credentials)) {
// Authentication successful
$token = auth()->user()->createToken('authToken')->plainTextToken;
return response()->json(['token' => $token], 200);
} else {
// Authentication failed
return response()->json(['message' => 'Invalid credentials'], 401);
}
}
Project one
Код: Выделить всё
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project_one,
Код: Выделить всё
DB_CONNECTION=mysql_oth
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project_two
- Why does Project Two switch to the default (Project one's) database connection when called from Project One , and how can I prevent this?
- Is there a Laravel-specific configuration or runtime aspect that I might be overlooking, which could cause this behavior?
Источник: https://stackoverflow.com/questions/781 ... el-project