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

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

В моем файле маршрутов у меня есть только

Auth::routes();

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


person Dev.Wol    schedule 09.03.2017    source источник
comment
В текущей версии laravel 5.7.5 для этого есть опция. Auth::routes(['register' => false]);   -  person Zohaib    schedule 22.09.2018
comment
см. github.com/laravel/framework/blob /5.7/src/Illuminate/Routing/   -  person Zohaib    schedule 22.09.2018


Ответы (13)


code:

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

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

Изменить для laravel version => 5.7

В более новых версиях вы можете добавить параметр к вызову функции Auth::routes(), чтобы отключить регистрацию маршрутов:

Auth::routes(['register' => false]);

Добавлены маршруты проверки электронной почты:

Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

Кстати, вы также можете отключить маршруты Password Reset и Email Verification:

Auth::routes(['reset' => false, 'verify' => false]);
person dparoli    schedule 09.03.2017
comment
зачем писать весь этот раздел для каждого маршрута аутентификации, если можно просто сделать как Auth::routes(['register' => false]);, зачем? - person Haritsinh Gohil; 17.07.2019
comment
@Haritsinh. Вопрос касался версии laravel 5.4. В версии 5.4 функция Auth::routes() не принимает никаких аргументов, которые были введены только в более поздних версиях. - person dparoli; 17.07.2019
comment
хорошо, вы правы, мой друг, Auth::routes() поддерживает аргумент после laravel 5.7, но вы также можете сделать это в версии laravel ‹5.7 Route::redirect('register', 'login', 301);, которая выглядит проще, чем указано выше, не так ли ? - person Haritsinh Gohil; 17.07.2019
comment
@Haritsinh Я хочу указать, что этот вопрос помечен, и для Laravel 5.4 запрашивается явная информация. В версии 5.4 функция Route::redirect() не существовала. - person dparoli; 17.07.2019
comment
хорошо, @dparoli, это моя вина, я этого не видел, redirect также добавлен в laravel 5.5, извините, спасибо за очистку. - person Haritsinh Gohil; 17.07.2019

Начиная с Laravel 5.7, в $options > Метод Auth::routes(); через который вы можете передать массив для управления генерацией необходимых маршрутов для аутентификации пользователя (допустимые записи могут быть выбраны из строковых литералов 'register', 'reset' или 'verify').

Auth::routes(['register' => false]);
person Irwing Reza    schedule 09.10.2018
comment
Другой вариант - добавить маршруты проверки электронной почты, которые по умолчанию отключены. Auth::routes(['verify' => true]); - person Grant; 09.11.2018
comment
Это должно быть ответом, поскольку это лучший [практический] способ сделать это, если вы хотите только отключить регистрационный маршрут, не желая редактировать другие маршруты Auth по умолчанию. - person SolidTerre; 28.02.2019
comment
Это следует рассматривать как идеальный ответ, поскольку это правильный способ игнорировать маршруты регистрации и также работает с Laravel 5.8. - person Mehul Panchasara; 14.04.2019

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

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

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

person Elvis Mugabi    schedule 01.04.2017
comment
Отключает /login страницу. - person Jason; 25.05.2017
comment
Работает действительно хорошо. Простое решение! Спасибо! - person iaforek; 14.11.2017
comment
Довольно простое решение и эффективно работающее. - person Uzair; 29.01.2019
comment
@ Джейсон ложь. Я тестировал его с помощью laravel 8, используя бутстрап larave ui auth - person Freddy Daniel; 06.07.2021

Это обманчиво просто! Вам просто нужно переопределить два метода в вашем 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);
}
person Snaver    schedule 20.09.2017

В web.php замените

Auth::routes();

С участием

Auth::routes(['register' => false]);

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

person Karthik M    schedule 03.11.2018
comment
Когда я это сделал, это также отключило мою страницу входа? - person rubendn; 22.11.2018

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

namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
person asmmahmud    schedule 03.10.2017
comment
Это перенаправит пользователя на страницу входа. И если пользователь вводит правильный адрес электронной почты / пароль. Он по-прежнему будет перенаправлен на страницу регистрации, что неверно в соответствии с требованиями OP. - person Waqas; 06.05.2018

В моем проекте Laravel 5.6 этот метод не работал:

Auth::routes(['register' => false]);

Поэтому мне пришлось использовать следующий метод:

Route::match(['get', 'post'], 'register', function () {
    return abort(403, 'Forbidden');
})->name('register');
person Abdelsalam Shahlol    schedule 08.05.2019

Я полагаю, вы хотите ограничить доступ к некоторым страницам для гостей, и только администратор может зарегистрировать гостя. Вы можете добиться этого, добавив собственное промежуточное ПО в файл 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');
person glou1986    schedule 15.04.2017
comment
Auth :: routes () находится в файле routes / web.php - person geeves; 24.07.2018

Я думаю, вы можете сделать это так, в своем файле web.php:

Route::redirect('register', 'login', 301);
person Evan    schedule 23.09.2018

Добавьте эти два метода в app \ Http \ Controllers \ Auth \ RegisterController.php

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

public function register(){

}
person sachinsuthariya    schedule 29.01.2019

Просто перезапишите свой метод аутентификации showRegistrationForm () (поместите этот код в свой Auth / RegisterController).

public function showRegistrationForm(){
    return redirect()->route('login');
}

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

person Manu Joseph    schedule 26.02.2019

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

Auth::routes();

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

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

person Hanny    schedule 09.03.2017
comment
те, кто проголосовали против, этот ответ не совсем неправильный, его правильная только половина - person Salal Aslam; 14.09.2017
comment
Если вы это сделаете, вы отключите и метод входа в систему, поэтому этот ответ неверен! - person user2519032; 14.09.2017
comment
На самом деле, это только половина правды. Auth::routes(); - это ярлык для набора маршрутов согласно документации. Если вы удалите Auth::routes();, вы сможете вводить любые маршруты, которые действительно хотите по отдельности (например, вход в систему). Я подумал, что это было само собой разумеющимся, потому что документация охватывала это - видимо, я был неправ. Этот ответ технически верен и верен. Я не знаю, почему люди все еще голосуют против ... это буквально половина принятого ответа. - person Hanny; 10.04.2018

Изменить на маршруты:

поставщик \ laravel \ framework \ src \ Illuminate \ 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');
}
person Carlos De la Cruz    schedule 13.08.2017
comment
вносить изменения в любые файлы в папке поставщика - худшая идея - person Salal Aslam; 14.09.2017
comment
Это плохая идея, поскольку следующее обновление Laravel переопределит редактируемый файл. Таким образом, ваши изменения теряются. Это также затрудняет отслеживание вашего кода. Другой разработчик может не подумать об изменении этого файла и, следовательно, никогда не искать у него никаких изменений. - person geeves; 24.07.2018