Я работаю с мультитенантной настройкой и ищу способ, которым, когда я пытаюсь запросить токены доступа, я могу отправить запрос в правильную конечную точку входа.
Например, в одномклиент, настроенный, когда я делаю запрос на access_token, будет выглядеть примерно так
$http = new \GuzzleHttp\Client;
try {
$response = $http->post('http://mydomain.test/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => env('CLIENT_ID'),
'client_secret' => env('CLIENT_SECRET'),
'username' => $request->username,
'password' => $request->password,
]
]);
return response()->getBody();
}
Теперь я пытаюсь сделать так, чтобы конечная точка входа в систему $ http-> post (мой url) измениласьв зависимости от того, какой пользователь-арендатор делает запрос.
Поэтому в настоящее время, когда я отправляю запрос на запись в контроллер входа в систему, я обертываю маршрут в промежуточное ПО, например
Route::group(['middleware' => 'tenancy.enforce'], function () {
Route::post('/login', 'PassportTokenController@login');
});
, а затем вмой контроллер, я могу вызвать секретный ключ клиента и fqdn, основываясь на запросе арендатором информации
. Поэтому, когда я запрашиваю fqdn выполняемого запроса и client_secret из базы данных арендатора, я получаю правильныйdata
$passport = DB::table('oauth_clients')->where('id', 2)->first();
$hostname = app(\Hyn\Tenancy\Environment::class)->hostname();
теперь, если я вставлю эти переменные в метод входа в систему, я получу внутреннюю 500-ю ошибку сервера
public function login(Request $request)
{
$passport = DB::table('oauth_clients')->where('id', 2)->first();
$hostname = app(\Hyn\Tenancy\Environment::class)->hostname();
$http = new \GuzzleHttp\Client;
try {
$response = $http->post('http://' . $hostname->fqdn . '/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 2,
'client_secret' => $passport->secret,
'username' => $request->username,
'password' => $request->password,
]
]);
return response()->getBody();
} catch (\GuzzleHttp\Exception\BadResponseException $e) {
if ($e->getCode() === 400) {
return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
} else if ($e->getCode() === 401) {
return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
}
return response()->json('Something went wrong on the server.', $e->getCode());
}
}
Уведомление tон $http->post(my url)
изменяется в зависимости от того, какой пользователь-арендатор делает запрос.
Есть ли что-то с паспортом, что я должен сделать, чтобы я мог динамически сделать запрос на токен доступа oauth?
*Обновите, так что после выяснения, как получить реальный ответ об ошибке сервера, я замечаю, что http-сервер Guzzle пытается запросить системную базу данных вместо базы данных клиентов
Base table or view not found: 1146 Table 'multitenant-diy.oauth_clients' doesn't exist (SQL: select * f (truncated...)
in C:\laragon\www\multitenant-diy\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php:113