В Laravel авторизация по умолчанию осуществляется через модель "User", однако, иногда требуется авторизация через другую модель. Это может быть полезно, например, когда у вас есть модель "Admin", которая отличается от модели "User" и используется для авторизации администраторов.
Для того чтобы сделать авторизацию через другую модель в Laravel, следуйте следующим шагам:
1. Создайте новую модель, которую вы будете использовать для авторизации. К примеру, "Admin". Для создания новой модели в Laravel вы можете использовать команду Artisan: php artisan make:model Admin
.
2. Внесите соответствующие изменения в новую модель "Admin". Убедитесь, что ваша модель "Admin" наследует класс "Authenticatable". Ваш класс "Admin" должен выглядеть примерно так:
use IlluminateContractsAuthAuthenticatable; use IlluminateDatabaseEloquentModel; class Admin extends Model implements Authenticatable { use IlluminateAuthAuthenticatableTrait; // ... }
3. Теперь нужно настроить, как Laravel будет использовать вашу новую модель "Admin" для авторизации. Для этого откройте файл config/auth.php
. В этом файле найдите массив providers
и измените значение model
на вашу новую модель "Admin". В итоге это должно выглядеть примерно так:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppModelsAdmin::class, ], ],
4. Теперь необходимо указать настройки гвардов в файле config/auth.php
. Добавьте новый гвард, например, "admin". Настройте его как показано ниже:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ],
5. Во вкладке "providers" файла config/auth.php
добавьте нового провайдера "admins", который будет использоваться для проведения аутентификации:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppModelsUser::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => AppModelsAdmin::class, ], ],
6. Далее вам нужно указать новый гвард по умолчанию в файле app/Http/Kernel.php
. Найдите свойство $routeMiddleware
и добавьте новый элемент в массив, например, 'auth.admin':
protected $routeMiddleware = [ // ... 'auth.admin' => AppHttpMiddlewareAuthenticateAdmin::class, ],
7. Создайте новый middleware, в котором будет проверяться аутентификация администратора. Выполните команду Artisan, чтобы создать новый middleware: php artisan make:middleware AuthenticateAdmin
.
8. Откройте только что созданный middleware app/Http/Middleware/AuthenticateAdmin.php
и добавьте следующий код:
public function handle($request, Closure $next, $guard = 'admin') { if (!Auth::guard($guard)->check()) { return redirect('login'); } return $next($request); }
9. Далее вам нужно создать маршруты для аутентификации администраторов. Откройте файл routes/web.php
и добавьте следующий код:
Route::group(['middleware' => 'auth.admin'], function () { // Ваши маршруты для авторизованных администраторов здесь });
Теперь у вас должна быть настроена авторизация через другую модель "Admin". При попытке доступа к маршрутам, требующим аутентификации администратора, Laravel будет использовать модель "Admin" для проверки и проведения аутентификации.