Я использую паспорт Laravel для аутентификации API, он отлично работает, когда я использую его с одной БД, но дает 401
при использовании нескольких баз данных,
Что я делаю:
- У меня есть мультитенантная БД, в основной БД есть пользователи, роли и все таблицы OAuth.
- Когда я создаю пользователя с ролью администратора, он создаст новую БД с именем администратора, он создаст вспомогательную БД с пользователями, ролями и всей таблицей OAuth.
oauth_clients
подчиненной БД скопирует токен предоставления пароля и токен персонального доступа из основной БД и вставит в подчиненную БД, а также вставитclient_id
вoauth_personal_access_clients
. Я выполняю все процедуры, которые выполняет команда
passport:install
. (Если я что-то не упускаю).Когда я вхожу в систему с учетными данными из главной БД, она работает отлично, настоящая проблема начинается, когда я вхожу в систему с учетными данными из под-базы данных, я могу получить дополнительную БД из параметра
client_code
, который я ввожу с помощью _7 _, _ 8_ при входе в систему.Это позволяет мне входить в систему из дополнительной БД, но я получаю
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
с двумя разными БД для одного и того же кода?
Laravel 5.4
Passport 4.0
Angular 4.4
во внешнем интерфейсе
Authentication
нужен только после входа в систему. И поскольку вход в систему и получение токена на предъявителя, по вашему мнению, отлично работает. Вы можете показать нам, какое значение имеет ваш заголовокAuthentication
. - person tprj29   schedule 01.12.2017