Laravel 8 (JetStream/Fortify) Registration & Login Redirect
American ITВсем прекрасен и хорош JetStream (c Fortify внутри). Но пока что эта конструкция не поддерживает кастомизацию редиректа после регистрации или авторизации в новых проектах Laravel 8. Ниже временное решение... Погнали!

UPD: Более простое решение ;)
В файле RouteServiceProvider.php на 20-й строке поменяйте путь. Все.
***
Создайте каталог Responses внутри app\Http.
Внутри создайте файл LoginResponse.php:
<?php
namespace App\Http\Responses;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
class LoginResponse implements LoginResponseContract
{
public function toResponse($request)
{
return $request->wantsJson()
? response()->json(['two_factor' => false])
: redirect()->intended(config('fortify.registered'));
}
}
Точно также создайте файл RegisterResponse.php:
<?php
namespace App\Http\Responses;
use Laravel\Fortify\Contracts\RegisterResponse as RegisterResponseContract;
class RegisterResponse implements RegisterResponseContract
{
public function toResponse($request)
{
return $request->wantsJson()
? response()->json(['two_factor' => false])
: redirect()->intended(config('fortify.registered'));
}
}
Теперь нужно заставить Laravel использовать наши собственные Response Class.
Этот новый класс заменяет синглтон, ранее зарегистрированный Fortify. Отредактируйте JetstreamServiceProvider внутри app\Providers. В метод boot() добавьте референс на ваш новый класс. Он будет срабатывать когда логин завершен и юзер уже авторизован:
public function boot()
{
$this->configurePermissions();
Jetstream::deleteUsersUsing(DeleteUser::class);
//Register new LoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\LoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
}
Если вы юзаете двухфакторку (2FA), то ее тоже надо добавить:
public function boot()
{
$this->configurePermissions();
Jetstream::deleteUsersUsing(DeleteUser::class);
//Register new LoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\LoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
//Register new TwofactorLoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\TwoFactorLoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
}
Аналогично для регистрации:
public function boot()
{
$this->configurePermissions();
Jetstream::deleteUsersUsing(DeleteUser::class);
//Register new LoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\LoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
//Register new TwofactorLoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\TwoFactorLoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
//Register new RegisterResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\RegisterResponse::class,
\App\Http\Responses\RegisterResponse::class
);
}
Далее, откройте файл config/fortify.php и в нем допишите параметр:
'registered' => '/home'
(ну или куда вам там надо юзера редиректить).
Ждем пока JetStream (или Fortify) сделают возможность кастомно редиректить юзеров куда нам надо, как это было в laravel/ui. А пока вот такой костыль.
Всех жду в своем чатике ;)