2017-07-27 4 views
0

Ich versuche, eine Route in Laravel, die einen Benutzer haben kann, wenn es eingeloggt ist, aber kann immer noch arbeiten, wenn nicht.Laravel (5.4) Passrouten mit aktuellen Benutzer, der auch funktioniert, wenn nicht eingeloggt

In meinem Fall habe ich eine Tabelle namens "Venues" und einen "Benutzer", der einen Veranstaltungsort als seinen Favoriten haben kann.

So sind diese meine Routen:

Route::group(['middleware' => ['cors', 'bindings', 'auth:api']], function() { 
    Route::match(['GET', 'OPTIONS'], 'venue/{venue}', '[email protected]')->name('venue')->where('venue', '[0-9]+'); 
}); 

Route::group(['middleware' => ['cors', 'bindings', 'api'], 'namespace' => 'Api'], function() { 
    Route::match(['GET', 'OPTIONS'], 'venue/{venue}', '[email protected]')->name('venue')->where('venue', '[0-9]+'); 
}); 

Jetzt bemerkte ich, dass Auth::user(); mit der Middleware mit 'auth:api' in der Route ist nur verfügbar, aber ich will es auch den Veranstaltungsort erhalten, wenn der Benutzer nicht angemeldet ist. Und die Verwendung beider Gruppen funktioniert nicht so.

My Location Modell sieht wie folgt aus:

class Venue extends Model 
{ 
    protected $appends = [ 
     'favourite', 
    ]; 

    public function users() 
    { 
     return $this->belongsToMany('App\Models\User', 'venue_user'); 
    } 

    public function getFavouriteAttribute() 
    { 
     $user = Auth::user(); 
     $isFav = false; 
     if ($user) { 
      if ($user->venues) { 
       foreach ($user->venues as $item) { 
        if ($item->id === $this->id) { 
         $isFav = true; 
        } 
       } 
      } 
     } 

     return $isFav; 
    } 
} 

Es muss einen besseren Weg, dies zu tun.

Ich hoffe, dass mir jemand helfen kann.

Antwort

0

Ok Ich habe endlich die Antwort auf meine eigene Frage gefunden. Anscheinend ist der richtige Weg, um den Strom von Passport zu erhalten ist, indem Sie:

$user = auth()->guard('api')->user(); 

Auth::user() ist in Strecken mit einer middlewhere von 'auth:api' nur verfügbar, aber dies ist überall verfügbar, wenn ich so richtig sagen.

Fühlen Sie sich frei, mich zu korrigieren, wenn ich falsch liege :)

Verwandte Themen