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());
}
解説するとこんな感じです。
- $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());
※ログイン後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しなくてはいけません。
まとめ
ずっと認証系のトレイトを追っていたからか、とてもスムーズに実装できました。
残るはユーザ一覧と管理者による変更機能。
頑張ります。

