Shogo Murakami
社内システム的なものを作る場合、Laravel標準のユーザー登録はよろしくない動作をしてしまうのでそこをいい感じに修正します。
Laravel標準の動作
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン
↓
このように修正します。
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない
1. 管理者のみユーザー登録できるようにする
参考サイト
Laravel:管理者のみに新規ユーザー登録(register)を許可
こちらを参考にファイルをいくつか修正しまし。
2. ユーザー登録処理後の動作を変更する
ここからが本題です
vendor以下を変更すると後々大変ですので、それを避けつつユーザー登録処理後の動作を変更します
参考サイト
Laravel:管理者によるregister実行後の動作を変える
Laravelでvendor内の処理をオーバーライドする方法
ユーザー登録後の処理を行なっている箇所
vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php
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. 任意のディレクトリに RegistersUsers.php をコピーし、修正
オーバーライドするために対象のファイルを任意の場所にコピーします。
今回はこのようにしました。
app\Vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php
問題のログイン部分をコメントアウトしてしまいましょう
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());
}
2. リダイレクト先を指定する
ユーザー登録後のリダイレクト先です。任意で指定
app\Http\Controllers\Auth\RegisterController.php
protected $redirectTo = '/user_list';
3. composer.jsonのautoloadを修正
ここが肝になります。
exclude-from-classmap
で元のファイルを読み込まないように、
files
で修正後のファイルを読み込むように指定します。
"autoload": {
"exclude-from-classmap": [
"vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Auth\\RegistersUsers.php"
],
"files":[
"app\\Vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Auth\\RegistersUsers.php"
]
}
4. composer.jsonの変更を反映する
composer.jsonに行なった変更を反映するためコマンドを実行します
composer dump-autoload
以上になります。
お疲れ様でした。