2
votes

Appliquer le middleware d'authentification à toutes les routes Laravel

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?


0 commentaires

3 Réponses :


4
votes

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


0 commentaires

5
votes

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


0 commentaires

2
votes

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 >


0 commentaires