2016-05-23 37 views
0

Laravel认证附加条件,该文档显示,我可以给认证查询添加更多的条件,像这样:也与其他模型中使用Laravel的5.2认证

指定附加条件

如果你愿意,你除了用户的电子邮件和密码以外,还可以向认证查询添加额外的条件。例如,我们可以验证用户标记为“主动”:

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

在我的情况,我想设置其住在另一许多一对多洋洋洒洒型号的条件:

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'); 
    } 
} 

有它虽然中间件通过一个帐户id和访问它是这样的:

$request->account

如何实现东北当它涉及一个相关模型时,它是否具有条件?我只是不知道如何使用ORM关系。任何帮助指向正确的方向非常感谢!

+0

你可以简单地实现在同这种逻辑/检查,如果在您使用验证::尝试声明()。您可以检查相关模型(假设它是这种情况下的帐户)$ request-> user() - > accounts() - > wherePivot('account_id',$ request-> account); –

+0

@CanCelik你的意思是作为'if'中的单独条件吗?不是'attempt()'的'credentials'参数的一部分吗? – greener

+0

没错。 try()方法有第三个选项,您可以在其中设置false,以便在其他条件不符合时不会记录用户。 –

回答

0

如果你想利用Eloquent的关系,不幸的是,你可能需要在'if'控制结构中添加另一个条件。直到你的Auth :: attempt()完成 - 没有Auth :: user()对象,并且你需要该对象用于ORM。

因此,你可以这样做:

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(); 
}