Кастомизация Jetstream

jetstream customization

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