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

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』に記載されています。

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

  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。
こいつをごっそり削ります。

上手くいきました?

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

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

まとめ

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

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

頑張ります。