У меня есть приложение Laravel с VueJS на внешнем интерфейсе с аутентификацией для нескольких типов пользователей, а также общедоступный API, к которому эти пользователи могут подключаться. Я использую паспорт для авторизации, а именно этот пакет: 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 охранников? Но мне нужно, чтобы каждый тип пользователя в бэкэнде ссылался на отдельную модель (я думаю, поскольку каждый тип / модель пользователя имеет присущие различия в отношениях и методах), поэтому я не уверен, как еще я поступил бы в этом направлении.