またも、マルチドメインで、メールアドレス認証時のエラー同様に課題に直面。
$this->middleware('verified');
こんな感じで、認証エラーを検出した場合、マルチドメイン運用だと、片方のドメインに遷移先が固定化されてしまいますので、解消していきます。
middlewareを確認
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
このようにEnsureEmailIsVerified::classに定義されています。
EnsureEmailIsVerified::classを確認
public function handle($request, Closure $next, $redirectToRoute = null)
{
if (! $request->user() ||
($request->user() instanceof MustVerifyEmail &&
! $request->user()->hasVerifiedEmail())) {
return $request->expectsJson()
? abort(403, 'Your email address is not verified.')
: Redirect::route($redirectToRoute ?: 'verification.notice');
}
return $next($request);
}
はい、バリバリいましたね。
認証エラー時に、redirectToRoute が通常 null でやってくるので ‘verification.notice’ のルートにリダイレクトしてますね。
こちらの件、同様に、routes/web.php内に、verification.noticeが複数ある場合、最後のルートが有効になっているみたいです。
解決方法
ミドルウェアなので、 [ EnsureEmailIsVerified.php ]を[ app/Http/Middleware ]なんかにコピーして編集、独自のミドルウェアを登録する。といったアプローチが一般的ですが、今回の場合は、もっと簡単に解決できます。
そもそも、引数で、$redirectToRoute を受け取れるようになっていますので、
$this->middleware('verified:verification.notice.hogehoge');
こんな感じで、独自のルート名を渡してあげるだけ。
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice.hogehoge');
このように任意で命名されたオリジナルのルートにリダイレクトしてくれます。