Расскажу о новых параметрах пакета Laravel Jetstream и как его настроить под свои нужды.
Настройка шаблонов аутентификации
Иногда нужно кастомизировать внешний вид определенных шаблонов аутентификации. Это можно сделать с помощью соответствующих методов, доступных через класс Laravel\Fortify\Fortify
. Как правило, это делается в методе boot
провайдера JetstreamServiceProvider
:
use Laravel\Fortify\Fortify; Fortify::loginView(function () { return view('auth.login'); }); Fortify::registerView(function () { return view('auth.register'); });
Настройка аутентификации пользователя
Иногда нужна полная кастомизация аутентифицирования учетных данных для входа и получения пользователей. Jetstream позволяет легко это сделать с помощью метода Fortify::authenticateUsing
.
Этот метод принимает Замыкание, получающее входящий HTTP-запрос. Замыкание отвечает за валидацию учетных данных в запросе и за возврат экземпляра пользователя. Если учетные данные невалидны или пользователь не найден, то Замыкание должно вернуть null
или false
. Обычно этот метод нужно вызывать из метода boot
провайдера JetstreamServiceProvider
:
use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Laravel\Fortify\Fortify; Fortify::authenticateUsing(function (Request $request) { $user = User::where('email', $request->email)->first(); if ($user && Hash::check($request->password, $user->password)) { return $user; } })
Подтверждение пароля
В приложении иногда может потребоваться подтверждения пароля от пользователя перед выполнением какого-либо действия. В Jetstream есть функционал, упрощающий эту задачу. Ниже продемонстрирован Livewire-код для этого случая. Пример для Inertia вы можете увидеть в документации.
Если вы используете Livewire-стек, то ваш Livewire-компонент, содержащий действие, требующее подтверждение пароля, должен использовать трейт Laravel\Jetstream\ConfirmsPasswords
. Затем вы должны обернуть своё действие в blade-компонент confirms-password
. Этот компонент должен содержать директиву wire:then
, указывающую, какое Livewire-действие должно быть запущено после подтверждения пароля пользователя. После того, как пользователь подтвердил свой пароль, от него не потребуется повторного ввода пароля в течение 15 минут:
<x-jet-confirms-password wire:then="enableAdminMode"> <x-jet-button type="button" wire:loading.attr="disabled"> {{ __('Enable') }} </x-jet-button> </x-jet-confirms-password>
Далее, в рамках подтверждаемого Livewire-действия, вы должны вызвать методу ensurePasswordIsConfirmed
. Это следует сделать в самом начале соответствующего метода действий:
/** * Enable administration mode for user. * * @return void */ public function enableAdminMode() { $this->ensurePasswordIsConfirmed(); // ... }
Кастомные страницы аутентификации для Inertia
Некоторые страницы Jetstream Inertia, например, Teams/Show
и Profile/Show
, рендерятся прямо из Jetstream. Однако вам может потребоваться передать на эти страницы дополнительные данные. Jetstream позволяет настроить данные/свойства, передаваемые на эти страницы с помощью метода Jetstream::inertia()->renderUsing
.
Этот метод принимает название страницы, которую вы хотите кастомизировать, и Замыкание. Замыкание получает входящий HTTP-запрос и массив дефолтных данных, обычно отправляемых на страницу. При необходимости вы можете изменить или добавить элементы к массиву данных. Обычно этот метод нужно вызывать из метода boot
провайдера JetstreamServiceProvider
:
use Illuminate\Http\Request; use Laravel\Jetstream\Jetstream; Jetstream::inertia()->renderUsing( 'Profile/Show', function (Request $request, array $data) { return array_merge($data, [ // Кастомные данные... ]); } );
Автор: Taylor Otwell
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.