Я использую паспорт Laravel для аутентификации API, он отлично работает, когда я использую его с одной БД, но выдает 401
при использовании нескольких баз данных,
Что я делаю:
- У меня мультитенантная БД, в основной БД есть пользователи, роли и все таблицы OAuth.
- Когда я создаю пользователя с ролью администратора, он создает новую базу данных с именем администратора, создает дополнительную базу данных с пользователями, ролями и всей таблицей OAuth.
oauth_clients
дочерней БД скопирует токен предоставления пароля и токен личного доступа из главной БД и вставит его в вспомогательную БД, а также вставитclient_id
вoauth_personal_access_clients
. Я делаю все процедуры, которые выполняет команда
passport:install
. (Если я что-то не пропустил).Когда я вхожу с учетными данными из основной БД, это работает отлично, реальная проблема начинается, когда я вхожу с учетными данными из под-базы данных, я могу получить под БД из параметра
client_code
, который я ввел с помощьюemail
,password
во время входа в систему.Это позволяет мне войти в систему из дополнительной БД, но я получаю ошибку
401 Unauthenticated
, получаю токен доступа при входе в систему и передаю заголовокAuthentication
сBearer
при каждом запросе после входа в систему сAngular
.Не знаю, чего мне здесь не хватает.
Промежуточное программное обеспечение DBConnection
Промежуточное ПО DBConnection устанавливает соединение по каждому запросу после входа в систему,
public function handle($request, Closure $next)
{
if ( $request->method() != 'OPTIONS' ) {
$this->access_code = $request->header('access-code');
if ( $this->access_code != '' && $this->access_code != 'sa' ) {
app('App\Http\Controllers\Controller')->setDB(AppHelper::DB_PREFIX.$this->access_code);
} else {
app('App\Http\Controllers\Controller')->setDB(AppHelper::DB_DEFAULT);
}
}
return $next($request);
}
DBConnection
динамически устанавливает базу данных по умолчанию в database.php
, для этого я вызываю метод setDB
, созданный в Controller.php
setDB Controller.php
public function setDB($database='') {
$config = app()->make('config');
$connections = $config->get('database.connections');
$default_connection = $connections[$config->get('database.default')];
$new_connection = $default_connection;
$new_connection['database'] = $database;
$config->set('database.connections.'.$database, $new_connection);
$config->set('database.default', $database);
}
Можно ли использовать passport
с 2 разными БД для одного и того же кода?
Laravel 5.4
Passport 4.0
Angular 4.4
в передней части