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('AppUser', 'account_users');
    }
}
class User extends Model implements AuthenticatableContract
{
    public function accounts() {
        return $this->belongsToMany('AppAccount', 'account_users');
    }
}

有一个帐户id通过中间件传递,我像这样访问它:

$request->account

当新条件

引用相关模型时,如何实现新条件?我只是不知道如何利用ORM关系。任何指向正确方向的帮助将不胜感激!

不幸的是,如果你想利用Eloquent的关系,你可能需要在"if"控制结构中添加另一个条件。直到你的Auth::try()完成 - 没有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();
}

最新更新