Расскажу о новых параметрах пакета 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.
