TL;DR
Laravel6.8以降では認証関連のコントローラーのRedirectTo
プロパティ等の内容について、個々のクラスで持つのではなく、RouteServiceProvider
の定数HOME
に集約されました。
Before
app/Http/Controllers/auth/LoginController.php
<?php
// 略
class LoginController extends Controller
{
// 略
protected $redirectTo = '/home';
// 略
}
After
app/Http/Controllers/auth/LoginController.php
<?php
// 略
class LoginController extends Controller
{
// 略
protected $redirectTo = RouteServiceProvider::HOME;
// 略
}
app/Providers/RouteServiceProvider.php
<?php
// 略
class RouteServiceProvider extends ServiceProvider
{
// 略
public const HOME = '/home';
変更された対象
この変更が行われた対象は、app/Http/Controllers/auth
配下の以下5コントローラーと、
.
├── ConfirmPasswordController.php
├── LoginController.php
├── RegisterController.php
├── ResetPasswordController.php
└── VerificationController.php
ミドルウェアのRedirectIfAuthenticated
です。
app/Http/Middleware/RedirectIfAuthenticated.php
<?php
// 略
class RedirectIfAuthenticated
{
// 略
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
}
所感
個人で新規にLaravelのプロジェクトを作成するときなどは、まずログイン後のリダイレクト先を'/home'
ではなく、'/'
にしていますが、ログイン後以外も含めたリダイレクト先の設定変更が一箇所で済むようになったのは良いですね。
Laravelの認証のような、もう完成仕切っているイメージのあるコードでも、まだまだDRYにできる余地があるというのが個人的には驚きでした。