我有一个带有VueJS的Laravel应用程序,该应用程序在前端具有对多种类型用户的身份验证,以及那些用户可以连接的面向公众的API。我正在使用Passport进行授权,特别是以下软件包:https://github.com/sfelix-martins/passport-multiauth
我正在利用以下代码在前端登录我的用户:
if (Auth::guard($guardType)->attempt($credentials)) {
$token = Auth::guard($guardType)->user()->createToken('my-website')->accessToken;
...
对于公共API,我向/oauth/token
发送了一个请求,以获取access_token
用于后续请求。
由于我有3种类型的用户(到目前为止,由type
表上的users
列表示),每种用户都有自己的模型,因此我设置了6个防护措施:
'user_web' => [
'driver' => 'session',
'provider' => 'users',
],
'user_api' => [
'driver' => 'passport',
'provider' => 'users',
],
'admin_web' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin_api' => [
'driver' => 'passport',
'provider' => 'admins',
],
'super_web' => [
'driver' => 'session',
'provider' => 'supers',
],
'super_api' => [
'driver' => 'passport',
'provider' => 'supers',
],
这是我发现可以同时运行后端和公共API用户身份验证的唯一方法,但它似乎本质上是不可扩展的。如果我有10个用户类型,我真的需要20个警卫吗?但是我确实需要后端上的每个用户类型都引用不同的模型(我认为,因为每个用户类型/模型在关系和方法上都有内在的差异),所以我不确定该如何做。