web-dev-qa-db-fra.com

Rediriger vers la connexion si l'utilisateur n'est pas connecté Laravel

je suis nouveau à laravel,

j'ai du code dans la __construct de mon contrôleur comme

if(Auth::check())
{
    return View::make('view_page');
}

return Redirect::route('login')->withInput()->with('errmessage', 'Please Login to access restricted area.');

ça marche bien, mais ce que je veux c'est. son vraiment ennuyeux de mettre ces codages dans chaque contrôleur, donc je souhaite mettre cette vérification d'authentification et rediriger vers la page de connexion en un seul endroit, peut être dans router.php ou filters.php.

J'ai lu certains messages dans le forum ainsi que dans stackoverflow, et ajouté du code dans filters.php comme ci-dessous, mais cela ne fonctionne pas non plus.

Route::filter('auth', function() {
    if (Auth::guest())
    return Redirect::guest('login');
});

Veuillez m'aider à résoudre ce problème.

14
rkaartikeyan

Laravel 5.4

Utilisez le middleware auth intégré.

Route::group(['middleware' => ['auth']], function() {
    // your routes
});

Pour un trajet unique:

Route::get('profile', function () {
    // Only authenticated users may enter...
})->middleware('auth');

documents Laravel

Laravel 4 (réponse originale)

C'est déjà intégré à laravel. Voir le filtre auth dans filters.php. Ajoutez simplement le filtre avant à vos itinéraires. Utilisez de préférence un groupe et enroulez-le autour de vos itinéraires protégés:

Route::group(array('before' => 'auth'), function(){
    // your routes

    Route::get('/', 'HomeController@index');
});

Ou pour un seul itinéraire:

Route::get('/', array('before' => 'auth', 'uses' => 'HomeController@index'));

Pour modifier l'URL de redirection ou envoyer des messages, modifiez simplement le filtre dans filters.php à votre convenance.

36
lukasgeiter

C'est absolument correct ce que les autres ont répondu. Cette solution est pour Laravel 5.4 Mais juste au cas où, si vous avez plus d'un middleware s'appliquant aux routes, assurez-vous que le middleware 'auth' arrive à la fin et non au début.

Comme ça:

Route::prefix('/admin')->group(function () {
    Route::group(['middleware' => 'CheckUser', 'middleware' => 'auth'], function(){

    });
});
0
pranavbapat

Pour éviter la répétition du code, vous pouvez l'utiliser dans le middleware. Si vous utilisez le Laravel build in Auth, Vous pouvez utiliser directement le auth middleware donné,

Route::group(['middleware' => ['auth']], function() {
   // define your route, route groups here
});

ou, pour un seul itinéraire,

Route::get('profile', function () {

})->middleware('auth');

Si vous créez votre propre système d'authentification personnalisé. Vous devez utiliser le middleware qui vérifiera que l'utilisateur est authentifié ou non. Pour créer un middleware personnalisé, exécutez php artisan make:middleware Middelware_Name_Here et enregistrez le middleware nouvellement créé.

0
Kiran Maniya