Laravel Multiauth с паспортом и вью - PullRequest
0 голосов
/ 31 мая 2019

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

...