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

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

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

Auth::routes();

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

Ответы

Ответ 1

code:

Auth::routes();

это сокращение для этой коллекции маршрутов:

// Authentication Routes...
Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\[email protected]')->name('register');
Route::post('register', 'Auth\[email protected]');

// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');

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

Редактировать для laravel version => 5.7

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

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

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

Route::get('email/verify', 'Auth\[email protected]')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\[email protected]')->name('verification.verify');
Route::get('email/resend', 'Auth\[email protected]')->name('verification.resend');

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

Auth::routes(['reset' => false, 'verify' => false]);

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Auth::routes();

С

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

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

Ответ 6

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

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

Ответ 7

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

Route::redirect('register', 'login', 301);

Ответ 8

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

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

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

Route::get('register', 'Auth\[email protected]')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\[email protected]')->middleware('authenticated');

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

Не забудьте заменить Auth::routes(); на подробный список, как показано ниже:

// Authentication Routes...
Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\[email protected]')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\[email protected]')->middleware('authenticated');

// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]etLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');

Ответ 9

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

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

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

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

Ответ 10

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

Ответ 11

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

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

public function register(){

}

Ответ 12

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

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

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

Ответ 13

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

Auth::routes();

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

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

Ответ 14

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

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

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\[email protected]')->name('login');
    $this->post('login', 'Auth\[email protected]');
    $this->post('logout', 'Auth\[email protected]')->name('logout');

    // Registration Routes...
    //$this->get('register', 'Auth\[email protected]')->name('register');
    //$this->post('register', 'Auth\[email protected]');

    // Password Reset Routes...
    //$this->get('password/reset', 'Auth\[email protected]')->name('password.request');
    //$this->post('password/email', 'Auth\[email protected]')->name('password.email');
    //$this->get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
    //$this->post('password/reset', 'Auth\[email protected]');
}