I'm using Laravel passport for API authentication, it works perfectly when I use it with one DB, but gives 401
when using multiple databases,
What I'm doing:
- I have a multi-tenant DB, master DB have users, roles and all OAuth tables.
- When I create a user with admin role it will create new DB with admin name, it will create sub DB with users, roles and all OAuth table.
oauth_clients
of sub DB will copy Password Grant Token and Personal Access Token from master DB and insert in sub DB, and also insertclient_id
inoauth_personal_access_clients
. I'm doing all the procedures which
passport:install
command does. (If I'm not missing something).When I login with credentials from master DB it works perfectly, the real problem starts when I login with credentials from sub-database, I can get sub DB from a param
client_code
which I input withemail
,password
while login.It allows me login from sub DB but I get
401 Unauthenticated
error, get Access token while login and I passAuthentication
Header withBearer
on every request after login fromAngular
front.Don't know what I'm missing here.
DBConnection Middleware
DBConnection middleware sets connection on every request after login,
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
sets default DB in database.php
dynamically, for that, I'm calling setDB
method created on 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);
}
Is it possible to use passport
with 2 different DB for same code?
Laravel 5.4
Passport 4.0
Angular 4.4
in front-end
Authentication
is only needed after login. And since login and getting the bearer token works perfectly according to you. Can you show us what value your headerAuthentication
has. – tprj29