2017-08-16 2 views
1

Ich habe die folgenden Dateien:Laravel 5.4 Middleware kann nicht definieren Wache

routes.php

Route::get('client-portal', '[email protected]'); 

DashboardController.php

public function __construct() 
{ 
    $this->middleware('auth:client-users'); 
} 

Auth.php

'guards' => [ 
    'web' => [ 
     'driver' => 'session', 
     'provider' => 'users', 
    ], 
    'client-users' => [ 
     'driver' => 'session', 
     'provider' => 'client-users', 
    ], 
    'api' => [ 
     'driver' => 'token', 
     'provider' => 'users', 
    ], 
], 
'providers' => [ 
    'users' => [ 
     'driver' => 'eloquent', 
     'model' => App\Models\User::class, 
    ], 
    'client-users' => [ 
     'driver' => 'eloquent', 
     'model' => \App\Models\ClientPortal\User::class 
    ], 
], 

Authenticate.php

public function __construct(Guard $auth) { 
    $this->auth = $auth; 
} 

public function handle($request, Closure $next) 
{ 
    if ($this->auth->guest()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      dd($this->auth); 
      return redirect()->guest('login'); 
     } 
    } 

    return $next($request); 
} 

Immer, wenn ich über client-users bin angemeldet und navigieren Sie zu /client-portal. Die dd von Authenticate.php gibt eine SessionGuard Instanz, mit dem Attribut name Satz web

Aber, ich habe angeben 'Auth: Client-Benutzer im Konstruktor des Controllers. Also mein erster Gedanke war, dass die Authenticate Middleware globale Middleware war, also überprüfte ich das, aber es war nicht. Wenn ich die Middleware-Zeile aus dem Konstruktor entferne, wird die Seite angezeigt.

Weiß jemand, wo das Problem liegt?

Vielen Dank.

Antwort

0

Offensichtlich unterstützt die Instanz, die an __construct übergeben wird, nicht die : Schreibweise für die Angabe der Guard. Diese Authenticate.php war die Originaldatei von einer früheren Version von Laravel. Das Attribut wird als dritter Parameter an handle übergeben.

Ich habe den Code wie folgt festgelegt:

class Authenticate 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     auth()->shouldUse($guard); 
     if (auth()->guest()) { 
      if ($request->ajax()) { 
       return response('Unauthorized.', 401); 
      } else { 
       return redirect()->guest('login'); 
      } 
     } 

     return $next($request); 
    } 
}