Laravel:管理者によるregister実行後の動作を変える

Laravel:register実行後の動作を変える

前の記事では『管理者によるユーザー登録/guestのユーザー登録不可』の実装について書きました。

前回までの状態ですと嫌な動きがあります。

管理者で新規ユーザーを作った後、作成したユーザーでログインしHomeを開く。

例えば、Adminという管理者でTESTというユーザーを作った場合、新規登録後はTESTでHomeへredirectされてしまいます。ログインテストが出来ると言えば聞こえはいいですが、気持ちいい動作ではないですよね。

新規ユーザー登録をしたらAdminのままHomeへ移動する様に作り変えていきます。

RegistersUsers.phpを変更

【vendeor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php】
これを弄ります。

前回の記事でルーターに記載したレジスターが見ている先がここです。createとその後の動作は 『public function register』に記載されています。

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

解説するとこんな感じです。

  1. $this->validator($request->all())->validate();
    ※バリデータ
  2. event(new Registered($user = $this->create($request->all())));
    ※クリエイト
  3. $this->guard()->login($user);
    ※クリエイトしたユーザーでのログイン
  4. return $this->registered($request, $user) ?: redirect($this->redirectPath());
    ※ログイン後TOPへリダイレクト

今回は『新規ユーザーでログインしない』『ログイン後TOPへリダイレクトする』なので邪魔者は項目3。
こいつをごっそり削ります。

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

//$this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

上手くいきました?

これでも上手くいかない場合は項目4を [ return redirect('/home'); ] と入れ替えます。
何も考えずにhomeにリダイレクトしろ!という関数ですね。

ちなみに、ここを [ return view('/home'); ] とするとアドレスが /register のまま/homeが表示されました。
redirectしなくてはいけません。

まとめ

ずっと認証系のトレイトを追っていたからか、とてもスムーズに実装できました。

残るはユーザ一覧と管理者による変更機能。

頑張ります。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください