2016-05-22 14 views
6

So bekomme ich normalerweise den aktuellen Benutzer mit Auth::user() und wenn ich feststellen, ob ein Benutzer tatsächlich angemeldet ist Auth::check. Dies scheint jedoch in meinem AppServiceProvider nicht zu funktionieren. Ich verwende es, um Daten über alle Ansichten hinweg zu teilen. Ich var_dump sowohl Auth::user() und Auth::check() während ich eingeloggt bin und bekomme NULL und false. Wie kann ich den aktuellen Benutzer in meine AppServiceProvider bekommen? Wenn das nicht möglich ist, wie erhalten Sie Daten, die für jeden Benutzer eindeutig sind (Daten, die sich nach user_id unterscheiden) über alle Ansichten hinweg. Hier ist mein Code zur Klarstellung.Laravel - So erhalten Sie aktuellen Benutzer in AppServiceProvider

if (Auth::check()) { 
     $cart = Cart::where('user_id', Auth::user()->id); 
     if ($cart) { 
      view()->share('cart', $cart); 

     } 
    } else { 
     view()->share('cartItems', Session::get('items')); 
    } 
+0

Sie müssen eine benutzerdefinierte Middleware dafür erstellen, siehe die Diskussionen: https://laracasts.com/discuss/channels/laravel/using-auth-in-service-provider-to-get-user-object, https : //github.com/laravel/framework/issues/7906 – Burak

Antwort

8

Laravel Sitzung in einer Middleware initialisiert wird, so dass Sie nicht die Sitzung von einem Service Provider zugreifen können, weil sie vor die Middleware in dem Anforderungslebenszyklus ausführen

Sie eine Middleware verwenden soll, teilen Ihre Zugriffe auf Variablen aus der Sitzung

Wenn aus irgendeinem anderen Grund, warum Sie es in einem Service-Provider tun möchten, können Sie einen view composer mit einem Rückruf, wie folgt verwenden:

public function boot() 
{ 
    //compose all the views.... 
    view()->composer('*', function ($view) 
    { 
     $cart = Cart::where('user_id', Auth::user()->id); 

     //...with this variable 
     $view->with('cart', $cart);  
    }); 
} 

Der Rückruf nur dann ausgeführt werden, wenn die Ansicht tatsächlich zusammengesetzt wird, so Middle bereits ausgeführt wird, und Sitzung wird

0

In AuthServiceProvider ‚s boot() Funktion schreibe diese Zeilen Code

public function boot() 
{ 
    view()->composer('*', function($view) 
    { 
     if (Auth::check()) { 
      $view->with('currentUser', Auth::user()); 
     }else { 
      $view->with('currentUser', null); 
     } 
    }); 
} 
erhältlich

Hier * bedeutet - in allen Ihren Ansichten $currentUser Variable steht zur Verfügung.

Dann, aus der Datei {{ currentUser }} wird Ihnen die Benutzerinformationen geben, wenn der Benutzer authentifiziert ist ansonsten Null.