Skip to main content
laravel

Laravelでvendor以下を汚さずユーザー登録をいい感じにする

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

以上になります。

お疲れ様でした。

この記事をシェアする