前提条件:
- Laravel版本:5.7
- Hyn/Multi-tenant Package 5.3
- Laravel Passport
我有一个使用Passport进行身份验证的Laravel应用程序。当前,当用户登录时,我使用以下控制器来授权并向用户授予访问令牌。
public function login(Request $request)
{
$http = new \GuzzleHttp\Client;
try {
$response = $http->post(config('services.passport.login_endpoint'), [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_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());
}
}
然而,有一些硬编码的内容无法在多租户设置中使用。
services.passport.client_id
和 services.passport.client_secret
它们是为后端的单个实例生成的。但当我设置多租户时,每个租户都会有自己独立的client_id
和client_secret
。
所以,我想要的工作流程基本上是这样的:
- 作为管理员,我为租户注册一个新的后端实例
- hyn\multi-tenant包将为新的租户创建一个数据库
- 该租户的新数据库将包含访问令牌和客户端密钥
到此为止已经完成并且已经运行良好,下面是我想要理解的部分
- 我的前端具有完全独立的代码库,通过API与后端通信。
- 因此,属于租户实例的前端用户将尝试使用我上面展示的
login
控制器登录,但我发帖的重点和我的问题是如何根据用户\租户数据库动态调用client_id
和client_secret
?
- 因此,属于租户实例的前端用户将尝试使用我上面展示的
我知道这可能是很多内容,但如果有任何想法,请告诉我。提前感谢您的帮助!