Как отключить регистрацию нового пользователя в Laravel 5

Я пытаюсь сделать однопользовательскую панель администратора (у которой есть только один пользователь) в Laravel 5, и я зарегистрировал этого пользователя, поэтому теперь я хочу отключить регистрацию для новых пользователей, конечно, форма входа должна работать, но нет нового регистра сейчас на. Как мне это сделать?

Я использую вход пользователя по умолчанию и регистрируюсь в версии 5.

Solutions Collecting From Web of "Как отключить регистрацию нового пользователя в Laravel 5"

Просто переопределите showRegistrationForm() и register() в AuthController :

 public function showRegistrationForm() { return redirect('login'); } public function register() { } 

Если вы используете Laravel 5.2 и вы установили связанные с auth функции с помощью php artisan make:auth то ваш файл app/Http/routes.php будет включать все связанные с auth маршруты, просто вызывая Route::auth() .

Метод auth () можно найти в vendor/laravel/framework/src/Illuminate/Routing/Router.php . Поэтому, если вы хотите сделать то, что предлагают некоторые люди, и отключить регистрацию, удалив ненужные маршруты (возможно, это хорошая идея), вам нужно скопировать маршруты, которые вы все еще хотите использовать с помощью метода auth (), и поместить их в app/Http/routes.php (заменив вызов Route :: auth ()). Так, например:

 <?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'); 

Если вы используете более низкую версию, чем 5.2, то это, вероятно, другое, я помню, что с 5 лет все изменилось совсем немного, в какой-то момент artisan make:auth был даже удален IIRC.

Метод 1 для версии 5.3

В laravel 5.3 нет AuthController. для отключения маршрута регистрации вам необходимо изменить конструктор RegisterController следующим образом:

Вы можете изменить форму:

 public function __construct() { $this->middleware('guest'); } 

чтобы:

 public function __construct() { Redirect::to('/')->send(); } 

Примечание: для использования Redirect не забудьте user Redirect; Таким образом, пользовательский доступ к https: // host_name / register перенаправляется на «/».

Метод 2 для версии 5.3

Когда мы используем php artisan make:auth добавляется Auth::route(); автоматически. Переопределите маршрут в /routes/web.php. Вы можете изменить это так: * вам нужно прокомментировать эту строку: Auth::routes();

  <?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | This file is where you may define all of the routes that are handled | by your application. Just tell Laravel the URIs it should respond | to using a Closure or controller method. Build something great! | */ // Auth::routes(); Route::get('/login', 'Auth\LoginController@showLoginForm' ); Route::post('/login', 'Auth\LoginController@login'); Route::post('/logout', 'Auth\LoginController@logout'); Route::get('/home', 'HomeController@index'); 

Благодаря! Надеюсь, это может решить ваши проблемы.

Для Laravel 5.3 и 5.4 здесь правильный способ сделать это:

Вы должны изменить:

 public function __construct() { $this->middleware('guest'); } 

в

 public function __construct() { $this->middleware('auth'); } 

в приложении / Http / Controller / Auth / RegisterController.php

Перезапись getRegister и postRegister сложна – если вы используете git, существует высокая вероятность того, что .gitignore настроен на игнорирование файлов фреймворка, что приведет к тому, что регистрация будет по-прежнему возможна в вашей производственной среде (если laravel устанавливается через композитор например)

Другая возможность – route.php и добавление этой строки:

 Route::any('/auth/register','HomeController@index'); 

Таким образом, файлы фреймов остаются в силе, и любой запрос по-прежнему будет перенаправлен от модуля регистра Framework.

AuthController.php @limonte перезаписывается в App \ Http \ Controllers \ Auth, а не в каталоге поставщика, поэтому Git не игнорирует это изменение.

Я добавил следующие функции:

 public function register() { return redirect('/'); } public function showRegistrationForm() { return redirect('/'); } 

и он работает правильно.

Heres мое решение по 5.4:

 //Auth::routes(); // Authentication Routes... Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... //Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); //Route::post('register', 'Auth\RegisterController@register'); // Password Reset Routes... 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'); 

Заметьте, что я прокомментировал Auth::routes() и два маршрута регистрации.

Важно: вы также должны убрать все экземпляры route('register') в макете app.blade , иначе Laravel app.blade ошибку.

Следующий метод отлично работает:

Скопируйте все маршруты из /vendor/laravel/framework/src/Illuminate/Routing/Router.php и вставьте его в web.php и закомментируйте или удалите Auth :: routes ().

Затем установите условное значение для включения и отключения регистрации с .env. Дублируйте файл 503.blade.php в просмотрах / ошибках и создайте запрещенный или запрещенный вами контент.

Добавьте ALLOW_USER_REGISTRATION = в .env и контролируйте регистрацию пользователя, установив его значение в true или false.

Теперь у вас есть полный контроль над маршрутами, и файлы Vendor остаются нетронутыми.

web.php

 //Auth::routes(); // Authentication Routes... Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... if (env('ALLOW_USER_REGISTRATION', true)) { Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); Route::post('register', 'Auth\RegisterController@register'); } else { Route::match(['get','post'], 'register', function () { return view('errors.403'); })->name('register'); } // Password Reset Routes... 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'); 

Это комбинация некоторых предыдущих ответов, в частности, Rafal G. и Daniel Centore.

В routes.php просто добавьте следующее:

 if (!env('ALLOW_REGISTRATION', false)) { Route::any('/register', function() { abort(403); }); } 

Затем вы можете выборочно контролировать, разрешена ли регистрация или нет в .env файле .env .

Мне пришлось использовать:

 public function getRegister() { return redirect('/'); } 

Использование Redirect :: to () дало мне ошибку:

 Class 'App\Http\Controllers\Auth\Redirect' not found 

В Ларавеле 5.4

Вы можете найти все маршруты, зарегистрированные через Auth::routes() в классе \Illuminate\Routing\Router в методе auth()

это выглядит так:

 /** * Register the typical authentication routes for an application. * * @return void */ public function auth() { // Authentication Routes... $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); $this->post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); $this->post('register', 'Auth\RegisterController@register'); // Password Reset Routes... $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); $this->post('password/reset', 'Auth\ResetPasswordController@reset'); } 

Просто скопируйте маршруты, которые вам нужны, и вы в порядке!

В laravel 5.3 вы должны переопределить значение showRegistrationForm() по умолчанию, включив код ниже в файл RegisterController.php в app\Http\Controllers\Auth

  /** * Show the application registration form. * * @return \Illuminate\Http\Response */ public function showRegistrationForm() { //return view('auth.register'); abort(404); //this will throw a page not found exception } 

так как вы не хотите разрешать регистрацию, лучше просто выбросить 404 error чтобы злоумышленник знал, что он потерян. И когда вы готовы к регистрации в своем приложении, uncomment //return view('auth.register'); затем комментарий abort(404);

\\\\\\\\\\\\\\ JUST FYI /////////////////////////// ////

Если вам нужно использовать множественную аутентификацию, например, создать auth для пользователей, участников, студентов, администраторов и т. Д., То я советую вам проверить этот hesto / multi-auth свой удивительный пакет для неограниченного количества авторизаций в приложениях L5.

Вы можете прочитать больше абзацев методологию Auth и связанный с ней файл в этой записи .

В Laravel 5.5

Я пытался решить ту же проблему в Laravel 5.5. Вместо использования Auth::routes() в файле маршрутов web.php я включил только маршруты входа / выхода:

 Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); 

Чтобы не менять код так, как он есть, просто создайте промежуточное программное обеспечение, чтобы определить, является ли URL-адрес запроса url («register»), затем перенаправляется на 404 или где угодно.

В Laravel 5.5

Работа над подобной проблемой и установка аргумента промежуточного программного обеспечения от гостя до «auth» казались более элегантным решением.

Редактировать файл: app-> http-> Controllers-> Auth-> RegisterController.php

 public function __construct() { //replace this //$this->middleware('guest'); //with this argument. $this->middleware('auth'); } 

Я мог бы ошибаться, хотя … но это кажется более гладким, чем редактирование маршрутизации с большим количеством строк и менее правдоподобным, чем просто перенаправление страницы … по крайней мере в этом случае, желая заблокировать регистрацию для гостей.

Добавить

 use \Redirect; 

в верхней части файла