在Laravel 5.2中使用多个表进行身份验证

时间:2016-05-21 10:20:01

标签: php laravel authentication laravel-5 laravel-5.2

我正在尝试使用5.2版创建一个laravel应用程序。哪里会有3种类型的用户

  1. 管理员(网站管理员) - 使用默认的“users”表 这个。
  2. 所有者(来自前端的网站列表创建者) - 使用 表“owners”为此。
  3. 客户(访客或已注册 访问者) - 使用表格“customers”。
  4. 现在我的问题是:

    我想确保登录所有者将获得正确的身份验证并重定向到他们自己的(其他默认的Auth路由)路由。

    与客户一样,他们将主要通过网站的前端登录,因此他们的路线将与业主和管理员不同。这些客户也将获得身份验证。

    我该如何管理?我一直在使用单人桌,但作为Laravel的新人我不知道如何用多桌来实现。

    我已经检查了laravel 5.2现在开始支持多个gaurds,但不知道我该怎么做。

    这有一些包,但我不想在包上转发这个。

    谢谢!

1 个答案:

答案 0 :(得分:1)

我建议您遵循 Polymorphic 方法。

假设有三种不同的表格:administratorsownerscustomers

现在,对于所有这些,有一个名为users的公用表,其中包含以下列: - profile_id profile_type

现在profile_id将成为表administratorsownerscustomers的外键,而 profile_type 将成为哪个 用户所属的模型

关系就像,

class User {

  public function profile() {
    return $this->morphTo();
  }

} 

--

class Administrator {

  public function user() {
    return $this->morphOne('App\User', 'profile');
  }

}

我们正在使用morphOne代替morphMany,因为users表中的 profile_id 字段对于一个管理员应该只有一行。

最后,出于创建/存储的目的。你必须: -

  1. 创建一个像

    这样的管理员

    $admin = Administrator::create($inputs);

  2. 然后做

    $user = new User($inputs);

    $admin->user()->save($user);

  3. 你已经完成了!

  4. 您可以从https://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations

    了解有关此方法的更多信息

    谢谢,