2016-08-02 12 views
1

Wenn ich fragen, ob (Auth :: Benutzer() -> Rolle == "xxxx") im Inneren CandidateEvent zeigt "Den Versuch, Eigentum von Nicht-Objekt zu erhalten" ist, dass die Komponente Auth :: BenutzerLaravel-Event: Wie benutze ich Auth :: user() in einem Event?

Das Problem() funktioniert nicht in meinem Event.

Was ist der richtige Weg, um Auth innerhalb von Ereignissen zu verwenden?

public function __construct() 
{ 
    if(Auth::user()->role == "XXXX") 
    { 
     $candidate = count(Candidate::CountNewCandidate()); 
    } 
    else 
    { 
     $candidate = count(Candidate::CountNewCandidateGroup()); 
    } 
    $this->data = [ 'cCandidate' => $candidate ];   
} 
+0

Ein Bild des Codes ist keine gute Idee. Bitte denken Sie darüber nach, Ihre Frage neu zu formatieren. –

+0

Entschuldigung, ich bin neu. Und nun? (Ist der Ereigniscode) –

+0

Übergeben Sie den Benutzer an das Ereignis in den Daten. – ceejayoz

Antwort

3

Erklärungen hinzufügen Wenn kein authentifizierter Benutzer ist Auth::user() wird null zurückkehren, so wird Auth::user()->role erhöhen die Trying to get property of non-object; Versuchen Sie zu prüfen, ob ein authentifizierter Benutzer ist durch die Verwendung Auth::check() dann können Sie die Rolle überprüfen:

public function __construct() 
{ 
    if(auth()->check() && auth()->user()->role == "XXXX") 
    { 
     $candidate = count(Candidate::CountNewCandidate()); 
    } 
    else 
    { 
     $candidate = count(Candidate::CountNewCandidateGroup()); 
    } 
    $this->data = [ 'cCandidate' => $candidate ];   
} 

Hinweis: Früher habe ich die Hilfsfunktion auth().

Ich hoffe, das wird Ihnen helfen.

+0

Das Problem ist, dass die Komponente Auth :: user() in meinem Event nicht funktioniert, und ich verwende bereits "Illuminate \ Support \ Facades \ Auth"; –

+0

Versuchen Sie den Helfer 'auth()', 'auth() -> user()'? –

0

Offenbar haben Sie den Namespace für die Auth-Fassade nicht importiert. Sie müssen es in den

use Illuminate\Support\Facades\Auth; 
+0

Ich verwende bereits "Illuminate \ Support \ Facades \ Auth"; –

0

Ich löste es dem Benutzer, Ereignis vorbei, durch die Daten in den Routen:

Route::group(['middleware' => ['xxxx']], function() { 
    event(new NameEvent($data)); 
    Route::auth(); 
}); 
0

Der Grund Auth :: Benutzer() ist null in einem Ereignis (vor allem, wenn es die Warteschlange gestellt wird), ist, weil es ist kein Benutzer. Die Authentifizierungsdaten werden normalerweise in einer Sitzung gespeichert, und wenn Ihr Even ausgelöst wird, gibt es keine Sitzungsvariable, also keine Sitzungsdaten.

In der Vergangenheit habe ich in den Benutzer im Falle bestanden haben, dann den Benutzer innerhalb der Event-Handler zu authentifizieren ich nennen würde:

\Auth::attempt(['email', $event->performedBy()->email]); 

Dies war notwendig, weil meine Anwendung fest viele Funktionen hatte mit Authentifizierung gekoppelt (anstelle eines UserInterfaces). Im Idealfall hätte ich den Benutzer einfach als Abhängigkeit übergeben können.

Verwandte Themen