2017-09-12 5 views
0

Ich habe ein Projekt mit ein paar Paketen, die Routen haben. Ich habe eine Staging/Demo-Umgebung, die öffentlich zugänglich sein muss.Laravel 5.5 erfordern Auth in Staging

Gibt es eine Möglichkeit, die Auth Middleware (oder etwas Ähnliches) für alle Routen zu benötigen, ohne sie auf alle einzelnen Routen und Routengruppen zu setzen? (Etwas im Bootstrap denken?)

Antwort

4

Wenn Sie möchten, dass eine Middleware während jeder HTTP-Anforderung an Ihre Anwendung ausgeführt wird, listen Sie einfach die Middlewareklasse in der $middleware-Eigenschaft Ihrer -Klasse auf.

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, 
]; 

Wenn Sie keinen Zugriff haben, oder wollen nicht, die Paket-Controller zu ändern, können Sie eine Middleware erstellen (empfohlen von AuthenticateSession vererben. Zum Beispiel:

<?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); 
    } 
} 

Dann Kernal.php sieht aus wie dies:..

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

läuft in ein Problem der auth-Middleware dort hinzugefügt wird, kann nicht die/login Route erreichen, weil, na ja, es ist ein Weg die Antwort, wie geschrieben, nicht sagen, machen sie Ihre. eigene Route (obwohl es impliziert ist). Ich möchte nur sicherstellen, dass wir für zukünftige Leser klar sind. –

+0

Sie können die folgende Zeile in Ihrem Controller hinzufügen, die das Anmelden und Abmelden behandelt (AuthController kann sein): '$ this-> Middleware ('auth', ['außer' => ['getActivate', 'anotherMethod']]); 'innerhalb des Konstruktors. –

+0

Ja. Ich möchte mich nicht mit den Paket-Controllern anlegen. Grundsätzlich sind diese Pakete "Full Service"; Also, ich denke, ich müsste (was ich kann) tun, was ich im Haupt-App-Bundle kann. Siehe Bearbeitungen, die auf einen Peer-Review warten. –