【Laravel】ユーザーの新規登録を制限する
とあるアプリで、自由にユーザー登録をさせたくない場合があったので、実装内容を記録しておきます。LaravelのAuth関連のルーティングをカスタマイズして、ユーザーの新規登録を制限してみます。
前提
Laravel6、7
ログイン機能をすでに実装しているものとします。
ログイン機能の実装については、↓
新規登録を完全に無効にしたい場合
ユーザーの新規登録を完全に禁止にして登録させたくない場合です。
これは簡単で、以下のようにルーティングを書けばOKです。
Auth::routes(); // ←これを Auth::routes(['register' => false]); // ←こう書き換える
各ページの新規登録ボタンはこれによって表示されなくなります。
新規登録を簡易的に制限したい場合
一般ユーザーには新規登録はさせたくないけど、特定のユーザーのみ登録ができるようにする方法です。
今回は、新規登録の機能は有効のままで、「新規登録ボタンの削除」と「URLの変更」で、ユーザーの新規登録を制限します。URLを知らないと新規登録ができないという少しゆるめの制限です。しっかり制限したい場合は、別の方法をとってください。
新規登録ボタンの削除
まず、新規登録ページへのリンクをすべて削除します。
Auth関連のファイル
resources/views/auth/login.blade.php
resources/views/layouts/app.blade.php
上記ファイル内の新規登録ボタンの削除。
その他、新規登録ページへのリンクがある場合は、すべて削除します。
URLの変更
新規登録ボタンを削除すれば、登録ページへは行けなくなりますが、デフォルトのルーティングのままだと、「○○/register」というURLなので、推測されてアクセスされてしまうので、URLを変更します。
ルーティングのカスタマイズ
Auth関連のルーティングは以下の一行で実装されています。
routes/web.php
Auth::routes();
これを無効にして、すべてのAuth関連のルーティングを設定し直す必要があります。
とは言っても、Laravel6、7の場合は以下の通りに書けばOKです。
routes/web.php
//Auth::routes(); // ←無効にする //新規登録 Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); Route::post('register', 'Auth\RegisterController@register'); //ログイン Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); //ログアウト Route::post('logout', 'Auth\LoginController@logout')->name('logout'); //パスワードリセット Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update'); //メール認証も実装している場合は以下も追加 Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice'); Route::get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify'); Route::post('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
この新規登録のルーティングの部分を以下のようにカスタマイズします。
routes/web.php
//新規登録(カスタムURL) Route::get('[ここに任意の文字列]', 'Auth\RegisterController@showRegistrationForm')->name('register'); Route::post('[ここに任意の文字列]', 'Auth\RegisterController@register');
好きな文字列を設定して新規登録URLを変更します。より複雑な文字列の方が安全です。
まとめ
以上で、一般ユーザーの新規登録の制限ができたと思います。ユーザー登録させたい特定のユーザーには、設定した文字列のURLを教えてあげれば、通常通りユーザー登録ができます。ただ、URLを知った人はすべて登録ができてしまうので、もっと厳密に制限したい場合は別の方法をとる必要があります。
-
前の記事
【Laravel8】npm audit fixしたらLivewireが動かなくなった 2021.06.17
-
次の記事
【Laravel8】ユーザーの新規登録を制限する 2021.06.24
コメントを書く