【发布时间】:2019-11-01 19:39:20
【问题描述】:
先决条件:
- Laravel 版本:5.7
- Hyn/多租户包 5.3
- Laravel 护照
所以我有一个 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 包随后将为新租户创建一个数据库
- 该租户的新数据库将包含访问令牌和 cliet_secret
到这里为止是完整的并且已经运行,下面是我想要理解的部分
- 我的前端有一个完全独立的代码库,它通过 API 与后端通信。
- 因此属于租户实例的前端用户将尝试使用我上面显示的
login控制器登录,但是我的帖子的重点和我的问题是我如何动态地根据用户\租户数据库调用client_id和client_secret??
- 因此属于租户实例的前端用户将尝试使用我上面显示的
我知道这可能需要消化很多,但如果有人有想法,我会全神贯注。提前谢谢你!
【问题讨论】:
标签: laravel multi-tenant laravel-passport