Применить промежуточное ПО Auth ко всем маршрутам Laravel

Каков правильный способ аутентификации всех маршрутов, кроме входа в систему и регистрации, когда я применяю промежуточное ПО аутентификации на всех контроллерах? Есть ли способ применить промежуточное ПО аутентификации в одном месте и исключить вход в систему, зарегистрировать маршруты?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
5
0
15 399
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

вы можете применить промежуточное программное обеспечение в файле routes.php, что вам нужно сделать, это поместить все ваши маршруты в группу и добавить промежуточное программное обеспечение auth (кроме Auth :: routes (), которое уже настроено), например :

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second Middleware
    });

    Route::get('user/profile', function () {
        // Uses first & second Middleware
    });
});

дополнительную информацию можно найти в документации: https://laravel.com/docs/5.7/routing#route-group-middleware

Вы можете сгруппировать все свои аутентифицированные маршруты, например, следующие, laravel предоставляет промежуточное ПО по умолчанию для пользователей аутентификации и гостей.

Route::group(['middleware' => ['auth']], function () { 
    Route::get('home', 'HomeController@index');
    Route::post('save-user', 'UserController@saveUser');
    Route::put('edit-user', 'UserController@editUser');
});

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

Вы можете добавить промежуточное ПО ко всему вашему файлу маршрута web.php, добавив промежуточное ПО в отображение маршрутов в RouteServiceProvider.

Перейдите в app/Providers/RouteServiceProvider.php и в mapWebRoutes() замените middleware('web') на middleware(['web', 'auth']):

protected function mapWebRoutes()
{
    Route::middleware(['web', 'auth'])
         ->namespace($this->namespace)
         ->group(base_path('routes/web.php'));
}

Создайте новый метод mapAuthRoutes():

protected function mapAuthRoutes()
{
    Route::middleware('web')
        ->namespace('App\Http\Controllers\Auth')
        ->group(base_path('routes/auth.php'));
}

Сопоставьте это:

public function map()
{
    $this->mapAuthRoutes(); // <-- add this
    $this->mapWebRoutes();
    ...
}

Создайте файл auth.php в папке routes, затем вставьте следующее (и удалите ненужное):

<?php

use Illuminate\Support\Facades\Route;

Route::get('login', 'LoginController@showLoginForm')->name('login');

Route::post('login', 'LoginController@login')->name('login');

Route::post('logout', 'LoginController@logout')->name('logout');


Route::get('register', 'RegisterController@showRegistrationForm')->name('register');

Route::post('register', 'RegisterController@register')->name('register');


Route::get('password/reset', 'ForgotPasswordController@showLinkRequestForm')->name('password.request');

Route::post('password/email', 'ForgotPasswordController@sendResetLinkEmail')->name('password.email');

Route::get('password/reset/{token}', 'ResetPasswordController@showResetForm')->name('password.reset');

Route::post('password/reset', 'ResetPasswordController@reset')->name('password.update');


Route::get('email/verify', 'VerificationController@show')->name('verification.notice');

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

Route::get('email/resend', 'VerificationController@resend')->name('verification.resend');

Теперь вы можете настроить все в одном месте, например prefix, name, middleware и namespace.

Проверьте php artisan route:list, чтобы увидеть результаты :)

Подлинный вопрос - зачем нам добавлять mapAuthRoutes ()? Пожалуйста, осветите.

quinny 09.04.2021 12:19

@quinny Вам не нужно создавать новую функцию mapAuthRoutes, вы можете добавить группу Route к функции mapWebRoutes, если хотите? Пока он нанесен на карту, как вы хотите это делать, зависит от вас. Если не сопоставлен, он не появится на artisan route:list и не будет работать. Для меня этот метод добавления намного чище? :)

emotality 09.04.2021 14:05

Другие вопросы по теме