2017-09-12 4 views
0

J'ai un projet avec quelques paquets qui ont des routes. J'ai un environnement de mise en scène/démo qui doit être accessible au public.Laravel 5.5 nécessite l'authentification dans la mise en scène

Existe-t-il un moyen d'exiger le middleware auth (ou quelque chose de similaire) pour toutes les routes sans le mettre sur tous les itinéraires et groupes de routes individuels? (Penser quelque chose dans bootstrap ??)

Répondre

4

Si vous voulez qu'un intergiciel s'exécute pendant chaque requête HTTP à votre application, lister simplement la classe de middleware dans la propriété $middleware de votre classe app/Http/Kernel.php.

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
    \App\Http\Middleware\TrimStrings::class, 
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
    \App\Http\Middleware\TrustProxies::class, 
    YOUR MIDDLEWARE::class, 
]; 

Si vous n'avez pas accès, ou ne veulent pas, de modifier les contrôleurs de package, vous pouvez créer un intergiciel (recommander héritant de AuthenticateSession Par exemple:.

<?php 

namespace App\Http\Middleware; 

use Illuminate\Session\Middleware\AuthenticateSession; 

use Auth; 
use Closure; 

class AuthenticateIfEnvironment extends AuthenticateSession 
{ 
    public function handle($request, Closure $next) 
    { 
     if (env('APP_ENV') == 'XXXXXXXX' && !Auth::user() && !$request->is('login')) { 
      return redirect('/login'); 
     } 
     return parent::handle($request, $next); 
    } 
} 

Alors Kernal.php ressemble ceci:..

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
    \App\Http\Middleware\TrimStrings::class, 
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
    \App\Http\Middleware\TrustProxies::class, 
    \App\Http\Middleware\AuthenticateIfEnvironment::class, 
]; 
+0

a rencontré un autre problème de la la réponse, comme il est écrit, ne dit pas qu'il middleware auth ne peut pas atteindre le/itinéraire de connexion parce que, eh bien, il est une route, faites votre. propre itinéraire (bien que cela soit implicite). Je veux juste m'assurer que nous sommes clairs pour les futurs lecteurs. –

+0

Vous pouvez ajouter la ligne suivante dans votre contrôleur qui gère la connexion et la déconnexion (AuthController peut être): '$ this-> middleware ('auth', ['except' => ['getActivate', 'anotherMethod']]); 'à l'intérieur du constructeur. –

+0

Oui. Je ne souhaite pas jouer avec les contrôleurs de paquets. Fondamentalement, ces paquets sont "full service"; Donc, je pense que je devrais (je veux) faire ce que je peux dans le bundle de l'application principale. Voir les modifications en attente d'examen par les pairs. –