Laravel 5.4 Отключить маршрут регистрации

Я пытаюсь отключить маршрут регистрации в моем приложении, которое работает с Laravel 5.4.

В моем файле маршрутов у меня есть только Auth :: routes ();

Есть ли способ отключить маршрут регистрации?

Код:

Auth::routes(); 

его shorcut для этой коллекции маршрутов:

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

Таким образом, вы можете заменить первый список маршрутов и прокомментировать любой маршрут, который вы не хотите в своем приложении.

Вы можете попробовать это.

 Route::match(['get', 'post'], 'register', function(){ return redirect('/'); }); 

Добавьте эти маршруты чуть ниже Auth::routes() чтобы переопределить маршруты регистрации по умолчанию. Любой запрос на маршрут /register будет перенаправлен на baseUrl.

Я полагаю, вы хотите ограничить доступ к некоторым страницам для гостей, и только администратор может зарегистрировать гостя. Вы можете достичь этого, добавив свое собственное промежуточное ПО в файл kernel.php, как показано ниже:

 protected $routeMiddleware = [ 'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class ]; 

После создания промежуточного программного обеспечения вы должны использовать его, чтобы вы могли перейти в файл web.php, где находятся ваши маршруты, и добавить его к маршруту, который вы хотите ограничить, как показано ниже:

 Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated'); Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated'); 

Таким образом, регистрация ограничена гостями, но администратор может получить доступ к странице, если он когда-либо захочет зарегистрировать другого администратора!

Не забудьте заменить 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')->middleware('authenticated'); Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated'); // 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'); 

Хотя вышеупомянутые решения работают, но я думаю, что изменение middleware на 'auth' в App\Http\Controllers\Auth\RegisterController станет одним из самых простых решений. Это приведет к перенаправлению всех посетителей на страницу входа, если они хотят получить доступ к любому из путей регистрации. Как это:

 namespace App\Http\Controllers\Auth; class RegisterController extends Controller { public function __construct() { $this->middleware('auth'); } 

Изменение маршрутов:

поставщик \ Laravel \ рамки \ SRC \ Осветите \ Routing \ router.php

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

Переименуйте RegisterController на любое другое имя или удалите его 🙂

Это обманчиво легко! Вам просто нужно переопределить два метода в вашем app/Http/Controllers/Auth/RegisterController.php . См. Ниже, что предотвратит отображение формы и, самое главное, заблокирует прямые запросы POST в ваше приложение для регистрации.

 /** * Show the application registration form. * * @return \Illuminate\Http\Response */ public function showRegistrationForm() { return redirect('login'); } /** * Handle a registration request for the application. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function register(Request $request) { abort(404); } 

Да, есть способ

 Auth::routes(); 

Удалите этот маршрут из вашего web.php в вашем каталоге маршрутов.

Этот маршрут контролирует регистрацию.