LoginSignup
4
4

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