LoginSignup
6
10

More than 1 year has passed since last update.

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

Posted at

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

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

version

PHP 8.0.11
laravel/framework 8.65.0
laravel/breeze 1.4.2

guestの新規ユーザー登録をガードする

/routes/auth.php

Route::get('/register', [RegisteredUserController::class, 'create'])
                ->middleware('guest')
                ->name('register');

Route::post('/register', [RegisteredUserController::class, 'store'])
                ->middleware('guest');

↓ 上記の2箇所の guest を auth に変更します。

Route::get('/register', [RegisteredUserController::class, 'create'])
                ->middleware('auth')
                ->name('register');

Route::post('/register', [RegisteredUserController::class, 'store'])
                ->middleware('auth');

ルートにアクセスした場合の遷移を変更する

未認証ユーザーの場合はログインページへ、認証ユーザーの場合はdashbordへ遷移するよう修正します。
/routes/web.php

Route::get('/', function () {
    return view('welcome');
});

Route::get('/', function () {
    return view('dashboard');
})->middleware(['auth'])->name('dashboard');

/resources/views/welcome.blade.php は削除してしまいましょう。

新規ユーザー登録後の挙動を変更する

標準の動作ではユーザー登録後、登録したユーザーで自動的にログインしてしまいます。
これをユーザー登録のみ行い、登録したユーザーに切り替えないよう修正します。
breezeではAuth周りの処理が /app/Http/Controlers/Auth に追加されるようになりましたので気にせず直接修正してしまいましょう。

/app/Http/Controlers/Auth/RegisteredUserController.php

event(new Registered($user));

Auth::login($user);

上記の2行をコメントアウトします。

主な作業は以上になります。
/register へのリンクを /dashbord など適当な場所に追加しておきましょう。

Laravel7以前のlaravel/uiと比べてAuth周りの処理がvendor以下に追加されなくなったのでカスタマイズが非常に楽になりました。
次のLTSバージョンとなるバージョン9でも引き継がれていることに期待します。

以上、お疲れ様でした。

6
10
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
6
10