Как заставить работать мультиавторизацию на 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