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






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