我正在处理两个 Laravel 项目,Project One 和 Project Two,在我的本地主机上运行。 项目一对项目二进行API调用。两个项目都使用单独的 MySQL 数据库,其中 Project Two 配置为使用 config/database.php 中名为 mysql_oth 的非默认连接。但是,当项目一对项目二进行API调用时,项目二尝试使用默认的(项目一)mysql数据库连接而不是mysql_oth。通过 Postman 直接向 Project Two 发出请求时不会出现此问题;在这种情况下,使用正确的 mysql_oth 连接。
这是我迄今为止已验证的内容:
项目一代码:
$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);
}
}
环境设置:
项目一
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
问题:
任何指导或见解将不胜感激。谢谢!
如果您正在使用排队作业, 确保这些作业不会在队列级别混合。
如果两个站点都在同一台服务器上运行, 使用相同的默认配置, 您可能会无意中将它们排队到同一个队列(Redis:默认) 允许两个应用程序中的 PHP 工作进程处理这些请求。 这可能很难诊断,因为:
如何将它们分开(取决于您如何配置队列)有点棘手。
如果您使用 Horizon,它可能会进一步混淆问题,因为它正在自动化一切(并且无意中掩盖了问题的根源。
通过以下方式区分多个应用程序:
希望这些见解有所帮助。 我通过在尽可能多的障碍物上踢我的小腿来学习我能找到(或找不到)的