Quelle est la bonne façon d'authentifier toutes les routes à l'exception de la connexion et de l'inscription lorsque j'applique le middleware d'authentification à tous les contrôleurs? Existe-t-il un moyen d'appliquer le middleware d'authentification en un seul endroit et d'exclure la connexion, d'enregistrer les routes?
3 Réponses :
vous pouvez appliquer des middlewares dans le fichier routes.php, ce que vous devez faire est de mettre toutes vos routes sur un groupe, et ajouter le middleware 'auth' (sauf les Auth :: routes () qui sont déjà configurés) , par exemple:
Route::middleware(['first', 'second'])->group(function () { Route::get('/', function () { // Uses first & second Middleware }); Route::get('user/profile', function () { // Uses first & second Middleware }); });
plus d'informations peuvent être trouvées dans la documentation: https://laravel.com/docs/5.7/routing#route-group-middleware
Vous pouvez regrouper toutes vos routes authentifiées comme suit, laravel fournit un middleware par défaut pour les utilisateurs authentifiés et invités
Route::group(['middleware' => ['auth']], function () { Route::get('home', 'HomeController@index'); Route::post('save-user', 'UserController@saveUser'); Route::put('edit-user', 'UserController@editUser'); });
Les noms de routes ci-dessus sont juste constitués, veuillez suivre une convention de dénomination appropriée pour vos itinéraires et contrôleurs. Découvrez également les middlewares sur ici et sur le routage via ici
Vous pouvez ajouter un middleware à l'ensemble de votre fichier de routage web.php
en ajoutant le middleware à votre mappage de routes dans RouteServiceProvider
.
Accédez à app / Providers / RouteServiceProvider.php
et dans mapWebRoutes ()
, remplacez middleware ('web')
par middleware (['web', 'auth' ])
:
<?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');
Créer une nouvelle méthode mapAuthRoutes()
:
public function map() { $this->mapAuthRoutes(); // <-- add this $this->mapWebRoutes(); ... }
Mappez-le:
protected function mapAuthRoutes() { Route::middleware('web') ->namespace('App\Http\Controllers\Auth') ->group(base_path('routes/auth.php')); }
Créez un fichier auth.php
dans votre dossier routes
, puis collez ce qui suit ( et supprimer les éléments indésirables):
protected function mapWebRoutes() { Route::middleware(['web', 'auth']) ->namespace($this->namespace) ->group(base_path('routes/web.php')); }
Vous pouvez maintenant tout configurer en un seul endroit, comme prefix
, name
, middleware et namespace
.
Vérifiez php artisan route: list
pour voir les résultats :)
p >