4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Larave 5.3と5.2でphp artisan make:authした時に生成される認証関連機能のControllerにだいぶ差異があって困惑した話

Last updated at Posted at 2016-10-05

発端

やりたかったこと

  • ログアウト後のリダイレクト先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触ってるとき、「あれ?こんなだったっけ?」とは思っていたけれど…。
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?