来自同一登录名的 Laravel Multi-auth(多个用户表)

Posted

技术标签:

【中文标题】来自同一登录名的 Laravel Multi-auth(多个用户表)【英文标题】:Laravel Multi-auth (multiple user tables) from same login 【发布时间】:2018-08-07 20:00:59 【问题描述】:

我计划开发一个具有三种用户类型(管理员、业务、个人)的系统。我希望将每个用户类型的信息存储在单独的表中,以便于访问并减少空白字段的数量(如果它们都在一个表中)。

查看了可用于 Laravel 的多个 Multi-auth 包后,他们似乎都坚持使用如下 URL 的方法:

/admin/登录 /企业/登录 /个人/登录

理想情况下,我想采用一种可以使用标准 Laravel Auth /login 的方法,这意味着所有用户都从同一页面登录。

我对 Laravel 的了解有限,因此不胜感激。

【问题讨论】:

【参考方案1】:

通常的方法是创建一个users 表,其中包含将要登录到系统。但是,可以将信息存储在每种类型的单独表中,并引用外键。 对用户进行身份验证后,您可以根据用户类型决定如何处理该用户。

如果您将登录凭据存储在多个表中,这就是数据冗余。除非您希望相同的电子邮件/用户名具有多个用户类型,但是在登录期间,用户必须决定他们要登录的用户类型(可能通过选择下拉选项)。


更新:关于用户角色

如果您需要在登录后简单地重定向用户,请使用$redirectTo。或者,如果您需要在登录后根据角色决定如何处理用户,您可以在您的 @ 987654329@/LoginController.

在整个应用程序中,我建议将 middleware 分配给 route groups 以根据用户角色限制路由。是的,在您的视图和控制器中,您可以在需要时使用if(Auth::user()->hasRole('business')) 之类的东西,但首先您需要在用户模型 中创建hasRole() 方法。如果你觉得它变得复杂,你可以尝试像 laravel-permission 和 Entrust 这样的包。不过我还没试过:)

【讨论】:

完美,我一直在尝试这个,到目前为止一切似乎都在工作!感谢您的帮助:) @SeanTreanor 很高兴能帮上忙 :) 如果您不介意我问,我还有一个问题。如果我在系统中采用这种方法,我是否需要与警卫一起工作,或者我可以在向他们提供信息之前持续使用一个功能来检查用户的角色吗?例如: if (Auth()->user()->role == "business") // 显示 if 业务 else if (Auth()->user()->role == "admin") // 显示是否为管理员 @SeanTreanor 您可以只使用您提到的功能来检查角色而不是警卫。我已经更新了关于用户角色的答案。如果它回答了您的问题,您可以将其标记为已回答:) 干杯 你@sykez 是一个救世主!我是 *** 的新手,但我认为我已将问题设置为已回答!再次感谢朋友! :)

以上是关于来自同一登录名的 Laravel Multi-auth(多个用户表)的主要内容,如果未能解决你的问题,请参考以下文章

来自同一登录的Laravel Multi-auth(多个用户表)

同时认证带来的Laravel 5.8会话混乱

同一服务器上的 Laravel 4.2 环境

Laravel:如何打开多个域(不是子域)以显示来自同一服务器的页面(无重定向)?

Laravel 5.2 在同一页面上登录和注册表单

如何在 laravel 中使用 get 在单页路由中使用来自同一控制器的两个功能