LoginSignup
0
0

More than 1 year has passed since last update.

管理者のみに新規ユーザー登録を許可する[laravel6.*, laravel/ui]

Posted at

1年近く前に書いた記事が下書きに眠ったままでした...

社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
Laravel標準の動作
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン

このように修正します。
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない

version

laravel/framework 6.18.41
laravel/ui 1.2.0

管理者のみユーザー登録できるようにする

参考サイト
Laravel:管理者のみに新規ユーザー登録(register)を許可
こちらを参考にファイルをいくつか修正しまし。

ユーザー登録処理後の動作を変更する

ここからが本題です
vendor以下を変更すると後々大変ですので、それを避けつつユーザー登録処理後の動作を変更します
参考サイト
Laravel:管理者によるregister実行後の動作を変える
Laravelでvendor内の処理をオーバーライドする方法

ユーザー登録後の処理を行なっている箇所

vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php

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());
}

任意のディレクトリに RegistersUsers.php をコピーし、修正

オーバーライドするために対象のファイルを任意の場所にコピーします。
今回はこのようにしました。
app\Vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php
問題のログイン部分をコメントアウトしてしまいましょう

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());
}

リダイレクト先を指定する

ユーザー登録後のリダイレクト先です。任意で指定
app\Http\Controllers\Auth\RegisterController.php

RegisterController.php
    protected $redirectTo = '/user_list';

composer.jsonのautoloadを修正

ここが肝になります。
exclude-from-classmapで元のファイルを読み込まないように、
filesで修正後のファイルを読み込むように指定します。

composer.json
    "autoload": {

        "exclude-from-classmap": [
            "vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Auth\\RegistersUsers.php"
        ],
        "files":[
            "app\\Vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Auth\\RegistersUsers.php"
        ]
    }

composer.jsonの変更を反映する

composer.jsonに行なった変更を反映するためコマンドを実行します

コマンド
composer dump-autoload

以上になります。
お疲れ様でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0