- Основы
- Конфигурация
- Кастомизация
- Отключение аутентификации
- Кастомная модель пользователя
- Кастомные поля пользователя и профиль
- Ограничение доступа по ролям
- Аутентификационные pipelines
- Socialite
- Двухфакторная аутентификация
- JWT
Основы
MoonShine предоставляет встроенную систему аутентификации, которая по умолчанию использует собственную модель пользователя и guard
.
Это позволяет быстро начать работу с административной панелью, не беспокоясь о настройке аутентификации.
Конфигурация
Основные настройки аутентификации находятся в файле конфигурации config/moonshine.php
в секции auth
.
'auth' => [ 'enabled' => true, 'guard' => 'moonshine', 'model' => MoonshineUser::class, 'middleware' => Authenticate::class, 'pipelines' => [],],
Здесь вы можете настроить:
enabled
- включение/отключение встроенной аутентификации,guard
- имя guard'а для аутентификации,model
- класс модели пользователя,middleware
- middleware для аутентификации,pipelines
- дополнительные pipeline'ы для процесса аутентификации.
Кастомизация
Вы можете настроить аутентификацию в MoonShineServiceProvider
.
$config ->guard('admin') ->authMiddleware(CustomAuthMiddleware::class) ->authPipelines([ TwoFactorAuthentication::class, PhoneVerification::class, ]);
Отключение аутентификации
Если вы хотите отключить встроенную аутентификацию MoonShine, вы можете сделать это в MoonShineServiceProvider
.
$config->authDisable();
Кастомная модель пользователя
Если вы хотите использовать собственную модель пользователя вместо MoonshineUser
, вы можете указать её в конфигурации.
'auth' => [ 'model' => App\Models\Admin::class,],
Кастомные поля пользователя и профиль
MoonShine позволяет настроить поля пользователя, используемые для аутентификации и профиля.
$config ->userField('username', 'login') ->userField('password', 'pass') ->userField('name', 'full_name') ->userField('avatar', 'profile_image');
При этом если вы хотите полностью заменить страницу профиля на свою, то можете это сделать через конфигурацию.
'pages' => [ 'profile' => App\MoonShine\Pages\CustomProfile::class,],
$config->changePage( \MoonShine\Laravel\Pages\ProfilePage::class, \App\MoonShine\Pages\CustomProfile::class);
Ограничение доступа по ролям
Если вам нужно ограничить доступ к административной панели MoonShine на основе ролей пользователей или других условий, вы можете легко добавить собственный middleware
.
Создание middleware
Создайте новый middleware
, например, CheckAdminRole
.
namespace App\Http\Middleware; use Closure;use Illuminate\Http\Request;use Symfony\Component\HttpFoundation\Response; class CheckAdminRole{ public function handle(Request $request, Closure $next): Response { if ($request->user() && ! $request->user()->hasRole('admin')) { abort(403, 'Access denied.'); } return $next($request); }}
Добавление middleware в конфигурацию
'middleware' => [ // ... other middleware \App\Http\Middleware\CheckAdminRole::class,],
$config->addMiddleware([ \App\Http\Middleware\CheckAdminRole::class,]);
Аутентификационные pipelines
Аутентификационные pipelines
в MoonShine позволяют добавлять дополнительные проверки и действия в процесс аутентификации после успешной проверки логина и пароля.
Настройка pipelines
'auth' => [ // ... 'pipelines' => [ // ... ],],
$config->authPipelines([ \App\MoonShine\AuthPipelines\TwoFactorAuthentication::class, \App\MoonShine\AuthPipelines\PhoneVerification::class,]);
Создание pipeline
Например, подтверждение входа по номеру телефона:
namespace App\MoonShine\AuthPipelines; use Closure;use MoonShine\Laravel\Models\MoonshineUser; class PhoneVerification{ public function handle(Request $request, Closure $next) { $user = MoonshineUser::query() ->where('email', $request->get('username')) ->first(); if (! is_null($user) && ! is_null($user->getAttribute('phone'))) { $request->session()->put([ 'login.id' => $user->getKey(), 'login.remember' => $request->boolean('remember'), ]); return redirect()->route('sms-challenge'); } return $next($request); }}
Преимущества использования pipelines
- Гибкость: Легко добавлять, удалять или изменять порядок проверок,
- Модульность: Каждый аспект расширенной аутентификации изолирован в отдельном классе,
- Расширяемость: Простое добавление новых методов аутентификации или проверок.
Использование аутентификационных pipelines позволяет реализовать сложные сценарии аутентификации, сохраняя чистоту и модульность кода, и дает полный контроль над процессом входа пользователей в административную панель MoonShine.
Socialite
Для удобства можно связать аккаунт с социальными сетями и упростить процесс аутентификации.
В основе этого функционала - пакет Laravel Socialite.
Убедитесь, что он у вас установлен и настроен.
Далее установите пакет для интеграции Socialite
в MoonShine:
composer require moonshine/socialite
Выполните миграции:
php artisan migrate
Опубликуйте файл конфигурации:
php artisan vendor:publish --provider="MoonShine\Socialite\Providers\SocialiteServiceProvider"
Далее в конфиге config/moonshine-socialite.php
установите доступные драйверы и изображение для кнопки.
return [ 'drivers' => [ 'github' => '/images/github.png', 'facebook' => '/images/facebook.svg', ],];
Драйверы должны быть заранее настроены в пакете Socialite
.
Добавьте трейт MoonShine\Socialite\Traits\HasMoonShineSocialite
к модели, которая отвечает за пользователей админ. панели (по умолчанию это MoonshineUser
).
Не забудьте опубликовать модель, если используете конфигурацию по умолчанию:
namespace App\Models; use MoonShine\Socialite\Traits\HasMoonShineSocialite; final class MoonshineUser extends \MoonShine\Laravel\Models\MoonshineUser{ use HasMoonShineSocialite;}
И заменить в файле конфигурации:
'auth' => [ // ... 'model' => \App\Models\MoonshineUser::class,],
Мы автоматически добавим компонент SocialAuth
на страницу профиля и LoginLayout
, но если вы их переопределили и используете собственные, то добавьте компонент самостоятельно.
use MoonShine\Socialite\Components\SocialAuth; protected function components(): iterable{ return [ // ... SocialAuth::make(profileMode: true), ];}
Двухфакторная аутентификация
Для дополнительной безопасности вы можете установить двухфакторную проверку аутентификации.
composer require moonshine/two-factor
Далее выполните миграции:
php artisan migrate
Далее добавьте authPipeline
:
use MoonShine\TwoFactor\TwoFactorAuthPipe; return [ // ... 'auth' => [ // ... 'pipelines' => [ TwoFactorAuthPipe::class ], ]];
use MoonShine\TwoFactor\TwoFactorAuthPipe; $config->authPipelines([ TwoFactorAuthPipe::class]);
Добавьте трейт MoonShine\TwoFactor\Traits\TwoFactorAuthenticatable
к модели, которая отвечает за пользователей админ-панели (по умолчанию это MoonshineUser
).
Не забудьте опубликовать модель, если используете конфигурацию по умолчанию:
use MoonShine\TwoFactor\Traits\TwoFactorAuthenticatable; final class MoonshineUser extends \MoonShine\Laravel\Models\MoonshineUser{ use TwoFactorAuthenticatable;}
И заменить в файле конфигурации:
'auth' => [ // ... 'model' => App\Models\MoonshineUser::class,],
Мы автоматически добавим компонент TwoFactor
на страницу профиля, но если вы её переопределили и используете собственную, то добавьте компонент самостоятельно.
use MoonShine\TwoFactor\ComponentSets\TwoFactor; protected function components(): iterable{ return [ // ... TwoFactor::make(), ];}
JWT
MoonShine также предоставляет простой способ переключить панель администратора в режим API
и взаимодействовать через токены.
Подробнее читайте в разделе API.