[Laravel 5.7]ユーザー登録~確認後に元のページにリダイレクトさせる方法

php artisan route:listで登録時の処理を調べると

GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm

POST | register | | App\Http\Controllers\Auth\RegisterController@register

となっています。

RegisterControllerでは

app/Http/Controllers/Auth/RegisterController.php

RegistersUsersトレイトを使っていてこの中にshowRegistrationForm()register()が書いてあります。

Illuminate/Foundation/Auth/RegistersUsers.php

register()の最後にregistered()が呼ばれるのですが、通常だと空のメソッドなのでnullを返しredirect($this->redirectPath())が返されます。

元のページにリダイレクトさせるにはshowRegistrationForm()registered()をオーバーライドします。

app/Http/Controllers/Auth/RegisterController.php

元のURLは$_SERVER[‘HTTP_REFERER’]に格納されているので、session()url.intendedに登録します。
これをユーザー認証時に取りだしリダイレクト先に設定します。

※あまりないと思いますが、ユーザーがURL直打ちで登録ページにアクセスした場合、$_SERVER[‘HTTP_REFERER’]がUndefined Indexになるので、トップページにリダイレクトするようにします。

今回は、登録後のリダイレクト先は登録したユーザー自身のユーザーページ(users/{id})にします。
そして「ユーザー登録はまただ完了していません。メールに記載されているリンクをクリックしてください。」というフラッシュメッセージを表示させ、メールの確認を促します。

次に登録確認時の処理です。
登録確認にはVerificationControllerが使われます。
verify()メソッドが登録確認時に動いています。
これはVerifiesEmailsトレイトに書いてあるのでこれをオーバーライドします。

app/Http/Controllers/Auth/VerificationController.php

$intendedに先ほどの元URLを代入します。
これをレダイレクト先に設定すれば完了です。

※フラッシュメッセージの表示ですが、今回は全てのページで継承しているblade(<header>などが書いてあります)に

を追加しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です