【Laravel8】ユーザーの新規登録を制限する

前に【Laravel】ユーザーの新規登録を制限するという記事を書きましたが、Laravel8でも同じ実装が必要になったので、調べてみた。内容的には、一般ユーザーに自由にユーザー登録をさせずに、特定のユーザーにのみ登録をさせるための方法です。Auth関連のルーティングをカスタマイズして、ユーザーの新規登録を制限します。

前提

Laravel8
Jetstreamによるログイン機能を実装している。

新規登録を完全に無効にしたい場合

ユーザーの新規登録を完全に禁止にして登録させたくない場合です。

「config/fortify.php」の以下の箇所で、新規登録の部分をコメントアウト(無効に)するだけです。

各ページの新規登録ボタンはこれによって表示されなくなります。

config内を編集した場合は、「php artisan config:clear」を忘れずに。

新規登録を簡易的に制限したい場合

一般ユーザーには新規登録はさせたくないけど、特定のユーザーのみ登録ができるようにする方法です。

今回は、新規登録の機能は有効のままで、「新規登録ボタンの削除」と「URLの変更」で、ユーザーの新規登録を制限します。URLを知らないと新規登録ができないという少しゆるめの制限です。しっかり制限したい場合は、別の方法をとってください。

新規登録ボタンの削除

まず、新規登録ページへのリンクをすべて削除します。

Auth関連のファイル

「resources\views\auth\login.blade.php」
「resources\views\layouts\app.blade.php」

上記ファイル内の新規登録ボタンの削除。
その他、新規登録ページへのリンクがある場合は、すべて削除します。

URLの変更

新規登録ボタンを削除すれば、登録ページへは行けなくなりますが、デフォルトのルーティングのままだと、「○○/register」というURLなので、推測されてアクセスされてしまうので、URLを変更します。

ルーティングのカスタマイズ

Laravel7までは、Auth関連のルーティングは以下の一行で実装されていました。

Laravel8からは、Auth関連のルーティングはvendor内「vendor\laravel\fortify\routes\routes.php」に入ってしまいました。これはpublishして外へ出すことができないとのこと。

なので、Auth関連のルーティングを無効にしてから、「routes\web.php」にすべてのルーティングを設定し直す必要があります。

Auth関連のルーティングを無効

Auth関連のルーティングを無効にするには、「app\Providers\FortifyServiceProvider.php」の以下の箇所を編集します。

Auth関連のルーティングをし直す

「vendor\laravel\fortify\routes\routes.php」に書かれたルーティングをすべて「routes\web.php」に追記します。

追記するルーティング部分は以下の通り。(結構な量ですが)

この新規登録のルーティングの部分を以下のようにカスタマイズします。

好きな文字列を設定して新規登録URLを変更します。より複雑な文字列の方が安全です。

あと、ルーティングに使われているController関連のインポートも必要です。「routes\web.php」の上の方に、以下を追記します。

まとめ

以上で、一般ユーザーの新規登録の制限ができたと思います。ユーザー登録させたい特定のユーザーには、設定した文字列のURLを教えてあげれば、通常通りユーザー登録ができます。ただ、URLを知った人はすべて登録ができてしまうので、もっと厳密に制限したい場合は別の方法をとる必要があります。