Как заставить работать мультиавторизацию на Laravel Passport?

Например, я видел ответ на этом сайте о том, как вы можете добавить мульти-аутентификацию в Laravel Passport /questions/18266979/kak-realizovat-multiavtor-v-pasporte-laravel/18266994#18266994

Но я не понимаю, как пользователь становится администратором в этом ответе? Есть ли дополнительная строка в БД с is_admin? Или там целая таблица для админов? И где он пытается получить эту информацию, чтобы узнать, какой пользователь является администратором и ему будет разрешено делать определенные вызовы API?

1 ответ

У вас есть много способов сделать администратора, вы можете установить свойство "is_admin" в таблице пользователей или создать новую таблицу для администраторов [я считаю это более безопасным].

Создать авторизацию для администратора

Config\auth.php

'guards' => [
  /* ... */
  // ** News guard **
  'admin' => [
    'driver' => 'passport',
    'provider' => 'admins',
  ],
],
'providers' => [
  /* ... */
  // ** News provider **
  'admins' => [
    'driver' => 'eloquent',
    'model' => App\Administrator::class,
  ],
],
'passwords' => [
  // ** News resettings **
  'admins' => [
    'provider' => 'admins',
    'table' => 'password_resets',
    'expire' => 60,
  ],
],

Модель администратора

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\SoftDeletes;

class Administrator extends Authenticatable
{
    use HasApiTokens, Notifiable;
    use SoftDeletes;
}

Создать этот "AUTH" в контроллере легко

public function login()
{
        $user = Administrator::where("email", request('email'))->first();
        if(!isset($user)){
            return "Admin Not found";
        }
        if (!Hash::check(request('password'), $user->password)) {
            return "Incorrect password";
        } 
        $tokenResult = $user->createToken('Admin');
        $user->access_token = $tokenResult->accessToken;
        $user->token_type = 'Bearer';
        return $user;
}

Чтобы сделать аутентификацию в ваших маршрутах, просто добавьте промежуточное ПО

Route::resource('admins', 'AdminController')->middleware('auth:admin');

Чтобы изменить свой результат и чтобы не прошедшие проверку администраторы заходили на app\Http\Middleware\RedirectIfAuthenticated