ログイン処理のカスタマイズ

では、実際にログインの仕組みを作っていきましょう。 ほとんど出来上がっている状態ですが、

  • ログイン後のページが /home になっている
  • ログアウト後のページが / になっている

という2箇所が気になるところです。

  • ログイン後のページを /messages
  • ログアウト後のページを /login 

にそれぞれ変更していきましょう。

ログイン後のページを設定

現在は、ログイン後のページとして /homeが表示されていますが、 これは LoginControllerで設定されています。

LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    //(コメント略)

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home'; //リダイレクト先

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

上記を確認すると、

protected $redirectTo = '/home';

というところで /homeにリダイレクトが設定されています。

ここを

protected $redirectTo = '/messages';

と変更することでリダイレクト先が /messagesに変更されます。 確認してみましょう。

ミドルウェアのリダイレクト先を変更

さらに、認証完了後に実行されるミドルウェアのリダイレクト先も変更しておきます。 app/Http/MiddleWare/RedirectIfAuthenticated.php を開き

    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/home');
        }

        return $next($request);
    }

の箇所を

    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/messages');
        }

        return $next($request);
    }

に変更します。 (ミドルウェアについての解説はここでは割愛します。Laravelの各種制御に利用される重要な仕組みですので、基本的なアプリケーションがLaravelで作成できる様になった段階で、改めて詳しく調べてみることをお勧めします。)

ログアウト後のリダイレクト先を変更

続いて、ログアウト後のリダイレクト先を変更していきましょう。

$redirectToで設定できるログイン後のリダイレクト先とは異なり、ログアウト後のリダイレクト先は少し複雑な手順が必要になります。

トレイトのメソッド名を変更

現在のLoginControllerでは、ログアウトに利用される logout メソッドは AutenticateUsers というトレイトを利用して実装されています。

今回の処理では、

  • トレイトから継承される logout メソッドを doLogoutメソッドという名前にしておく
  • logoutメソッドを新規に作成
  • logoutメソッドでdoLogoutメソッドを実行してから、リダイレクト先を独自に設定

という流れでログアウト先を設定します。

LoginController.php

(省略)
    // use AuthenticatesUsers;
    use AuthenticatesUsers {
        // logout というメソッドを、doLogoutというメソッド名に変更して継承する
        logout as doLogout;
    }

上記の変更で、doLogout というメソッド名で元々のlogoutメソッドが継承されます。

続いて、logoutメソッドを定義します。

LoginController.php

// 上部でRequestをuseしておく
use Illuminate\Http\Request;

(中略)

    public function logout(Request $request){
        // 1. 元々のログアウト処理を実行する
        $this->doLogout($request);
        // 2. リダイレクト先を独自に設定する。
        return redirect('/login'); 
    }

ログアウトリンクを追加

では、確認してみたいのですが、 現在の messages/index.blade.php ではログアウトリンクが表示されません。

タイトルの下にログアウトボタンを追加しておきましょう。

views/messages/index.blade.php

(省略)
    <h1>{{ $title }}</h1>
    {{-- 以下を追記 --}}
    <p>現在のユーザー名: {{ Auth::user()->name }} </p>
    <form action="{{ url('/logout') }}" method="post">
        {{ csrf_field() }}
        <button type="submit">ログアウト</button>
    </form>

追記が完了したら、 /messages に追加で表示されたログアウトボタンをクリックして、正しくログイン画面に遷移することを確認しておきましょう。

( Auth::user() メソッドでログインユーザー情報を取得している点にも注目です。)

results matching ""

    No results matching ""