El pasaporte Laravel da 401 error no autenticado
Estoy usando el pasaporte Laravel para la autenticación API, funciona perfectamente cuando lo uso con una base de datos, pero da401
cuando se usan múltiples bases de datos,
Que estoy haciendo:
Tengo una base de datos multiinquilino, la base de datos maestra tiene usuarios, roles y todas las tablas de OAuth.Cuando creo un usuario con función de administrador, creará una nueva base de datos con nombre de administrador, creará una base de datos secundaria con usuarios, funciones y toda la tabla OAuth.oauth_clients
de la base de datos secundaria copiará el token de concesión de contraseña y el token de acceso personal de la base de datos maestra e insertará en la base de datos secundaria, y también insertaráclient_id
enoauth_personal_access_clients
.Estoy haciendo todos los procedimientos quepassport:install
comando hace. (Si no me falta algo).
Cuando inicio sesión con credenciales de la base de datos maestra, funciona perfectamente, el verdadero problema comienza cuando inicio sesión con credenciales de la sub-base de datos, puedo obtener sub DB de un parámetroclient_code
que ingreso conemail
,password
mientras inicia sesión.
Me permite iniciar sesión desde sub DB pero obtengo401 Unauthenticated
error, obtener el token de acceso al iniciar sesión y pasoAuthentication
Encabezado conBearer
en cada solicitud después de iniciar sesión desdeAngular
frente.
No sé lo que me estoy perdiendo aquí.
DBConnection Middleware
El middleware DBConnection establece la conexión en cada solicitud después de iniciar sesión,
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
establece la base de datos predeterminada endatabase.php
dinámicamente, por eso, estoy llamandosetDB
método creado enController.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);
}
¿Es posible usarpassport
con 2 DB diferentes para el mismo código?
Laravel 5.4
Passport 4.0
Angular 4.4
en el front-end