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

とあるアプリで、自由にユーザー登録をさせたくない場合があったので、実装内容を記録しておきます。LaravelのAuth関連のルーティングをカスタマイズして、ユーザーの新規登録を制限してみます。

前提

Laravel6、7
ログイン機能をすでに実装しているものとします。

ログイン機能の実装については、↓

【Laravel6.0】ログイン機能を実装(ついでに日本語化)

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

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

これは簡単で、以下のようにルーティングを書けばOKです。

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

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

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

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

新規登録ボタンの削除

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

Auth関連のファイル

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

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

URLの変更

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

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

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

これを無効にして、すべてのAuth関連のルーティングを設定し直す必要があります。

とは言っても、Laravel6、7の場合は以下の通りに書けばOKです。

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

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

まとめ

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