How to disable registration new users in Laravel
I'm using Laravel. I want to disable registration for new users but I need the login to work.
How can I disable registration form/routes/controllers?
Solution 1:
Laravel 5.7 introduced the following functionality:
Auth::routes(['register' => false]);
The currently possible options here are:
Auth::routes([
'register' => false, // Registration Routes...
'reset' => false, // Password Reset Routes...
'verify' => false, // Email Verification Routes...
]);
For older Laravel versions just override showRegistrationForm()
and register()
methods in
-
AuthController
for Laravel 5.0 - 5.4 -
Auth/RegisterController.php
for Laravel 5.5
public function showRegistrationForm()
{
return redirect('login');
}
public function register()
{
}
Solution 2:
This might be new in 5.7, but there is now an options array to the auth method. Simply changing
Auth::routes();
to
Auth::routes(['register' => false]);
in your routes file after running php artisan make:auth
will disable user registration.
Solution 3:
If you're using Laravel 5.2 and you installed the auth related functionality with php artisan make:auth
then your app/Http/routes.php
file will include all auth-related routes by simply calling Route::auth()
.
The auth() method can be found in vendor/laravel/framework/src/Illuminate/Routing/Router.php
. So if you want to do as some people suggest here and disable registration by removing unwanted routes (probably a good idea) then you have to copy the routes you still want from the auth() method and put them in app/Http/routes.php
(replacing the call to Route::auth()). So for instance:
<?php
// This is app/Http/routes.php
// Authentication Routes...
Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');
// Registration Routes... removed!
// Password Reset Routes...
Route::get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
Route::post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
Route::post('password/reset', 'Auth\PasswordController@reset');
If you're using lower version than 5.2 then it's probably different, I remember things changed quite a bit since 5.0, at some point artisan make:auth
was even removed IIRC.