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

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


person user3351236    schedule 15.01.2019    source источник


Ответы (3)


вы можете применить промежуточное программное обеспечение в файле route.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

person Djellal Mohamed Aniss    schedule 15.01.2019

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

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

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

person Khan Shahrukh    schedule 15.01.2019

Вы можете добавить промежуточное программное обеспечение ко всему файлу маршрута 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, чтобы увидеть результаты :)

person emotality    schedule 15.01.2019
comment
Подлинный вопрос - зачем нам нужно добавлять mapAuthRoutes()? Пожалуйста, осветите. - person quinny; 09.04.2021
comment
@quinny Вам не нужно создавать новую функцию mapAuthRoutes, вы можете добавить группу Route в функцию mapWebRoutes, если хотите? Пока он нанесен на карту, как вы хотите это сделать, зависит от вас. Если он не сопоставлен, он не появится на artisan route:list и не будет работать. Этот метод добавления намного чище, для меня? :) - person emotality; 09.04.2021