発端
やりたかったこと
- ログアウト後のリダイレクト先URLを指定したい。
設定方法
L5.2の場合
-
ログアウト後のリダイレクト処理は、AuthenticatesUsersクラスで以下のように実装されている。
vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php<?php namespace Illuminate\Foundation\Auth; //... trait AuthenticatesUsers { use RedirectsUsers; /** * Log the user out of the application. * * @return \Illuminate\Http\Response */ public function logout() { Auth::guard($this->getGuard())->logout(); return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/'); } //... }
-
app/Http/Controllers/Authの中のAuthControllerクラスで$redirectAfterLogoutプロパティを設定する。
app/Http/Controllers/Auth/AuthController.php<?php namespace App\Http\Controllers\Auth; //... class AuthController extends Controller { //... use AuthenticatesAndRegistersUsers, ThrottlesLogins; //... protected $redirectAfterLogout = 'your/redirect/point/after/logout'; //... }
-
実現できた。
L5.3の場合
-
ログアウト後のリダイレクト処理は、AuthenticatesUsersクラスで以下のように実装されている。
vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php<?php namespace Illuminate\Foundation\Auth; //... trait AuthenticatesUsers { use RedirectsUsers, ThrottlesLogins; //... public function logout(Request $request) { $this->guard()->logout(); $request->session()->flush(); $request->session()->regenerate(); return redirect('/'); } //... }
- リテラルだけっすか…。変更できないじゃん!
-
LoginControllerでlogoutメソッドをオーバーライトする。
app/Http/Controllers/Auth/LoginController.php<?php //... use Illuminate\Http\Request; class LoginController extends Controller { //... use AuthenticatesUsers; //... public function logout(Request $request) { $this->guard()->logout(); $request->session()->flush(); $request->session()->regenerate(); return redirect('your/redirect/point/after/logout'); } //... }
-
実現できた。
- が、L5.2と比べてカッコワルイな。。。
調査
- そもそも、どのくらい差異があるのかみてみようかと。
準備
-
5.2と5.3のプロジェクトを用意してphp artisan make:auth
mkdir laravel cd laravel composer create-project --prefer-dist "laravel/laravel=5.2.*" laravel52 cd laravel52 php artisan make:auth cd .. composer create-project --prefer-dist "laravel/laravel=5.3.*" laravel53 cd laravel53 php artisan make:auth cd ..
-
認証関連機能Controllerファイル一覧を表示
[L5.2] tree laravel52/app/Http/Controllers/Auth/ laravel52/app/Http/Controllers/Auth/ ├── AuthController.php └── PasswordController.php 0 directories, 2 files [L5.3] tree laravel53/app/Http/Controllers/Auth/ laravel53/app/Http/Controllers/Auth/ ├── ForgotPasswordController.php ├── LoginController.php ├── RegisterController.php └── ResetPasswordController.php 0 directories, 4 files
- ほぉ…。L5.3触ってるとき、「あれ?こんなだったっけ?」とは思っていたけれど…。