2016-05-23 12 views
0

5.2 Authentifizierung Laravel der Verwendung zeigen die Dokumente, dass ich wie so mehr Bedingungen an eine Authentifizierungs-Abfrage hinzufügen:Laravel Authentifizierung zusätzliche Bedingungen mit einem anderen Modell

Zusätzliche Bedingungen angeben

Wenn Sie möchten, können Sie auch kann der Authentifizierungsabfrage zusätzlich zur E-Mail-Adresse und zum Kennwort des Benutzers zusätzliche Bedingungen hinzufügen. Zum Beispiel können wir, dass Benutzer markiert als "aktiv" überprüfen:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { 
    // The user is active, not suspended, and exists. 
} 

In meinem Fall würde Ich mag einen Zustand setzen, die in einer anderen many-to-many Eloquent Modell lebt:

class Account extends Model 
{ 
    public function users() { 
     return $this->belongsToMany('App\User', 'account_users'); 
    } 
} 
class User extends Model implements AuthenticatableContract 
{ 
    public function accounts() { 
     return $this->belongsToMany('App\Account', 'account_users'); 
    } 
} 

es gibt ein Konto id die zwar eine Middleware übergeben wird und ich auf sie wie folgt aus:

$request->account

Wie implementiere ich das ne w Zustand, wenn es sich auf ein verwandtes Modell bezieht? Ich weiß einfach nicht, wie ich die ORM-Beziehung nutzen soll. Jede Hilfe, die in die richtige Richtung zeigt, wird sehr geschätzt!

+0

können Sie einfach implementieren diese Logik/Check in der gleichen if-Anweisung in dem Sie Auth :: Versuch() verwenden. Sie können das zugehörige Modell überprüfen (unter der Annahme, dass es in diesem Fall ein Konto ist) $ request-> user() -> accounts() -> wherePivot ('account_id', $ request-> account); –

+0

@CanCelik du meinst als separate Bedingung im 'if'? Nicht ein Teil des '$ credentials' Param von' versuch() '? – greener

+0

das ist richtig. Die Methode propf() hat eine dritte Option, bei der Sie false setzen können, damit der Benutzer nicht angemeldet wird, wenn die andere Bedingung nicht erfüllt ist. –

Antwort

0

Wenn Sie die Beziehung von Eloquent nutzen möchten, müssten Sie wahrscheinlich unglücklicherweise eine weitere Bedingung innerhalb der Kontrollstruktur 'if' hinzufügen. Bis Ihr Auth :: versuch() fertig ist - es gibt kein Auth :: user() Objekt und Sie brauchen dieses Objekt für ORM.

Daher Sie so etwas wie tun könnte:

if (Auth::attempt(['email' => $email, 'password' => $password])) { 
    // Your extra conditions for accounts, just a couple of examples 
    if (count(Auth::user()->accounts) == 0) Auth::logout(); 
    if (! Auth::user()->accounts()->active()->get()) Auth::logout(); 
} 
Verwandte Themen