Laravel 4 中的多个身份验证会话

Posted

技术标签:

【中文标题】Laravel 4 中的多个身份验证会话【英文标题】:Multiple Auth sessions in Laravel 4 【发布时间】:2013-09-29 12:47:13 【问题描述】:

我目前正在处理的项目分为管理控制台和普通前端。 前端和后端都在同一个 Laravel 实例中。

在前端,我正在尝试创建一个专门用于前端的用户登录系统。它使用不同的表和模型,并且与管理员的用户模型相反,它具有不同的关系。

我想不通的是一种在两个系统中都使用 Laravel Auth 类的方法。从逻辑上讲,Auth 使用一个配置文件,更重要的是,一个会话名称。

已经提出的一个解决方案是不使用不同的表和模型,而是使用某种形式的 acl 进行区分。但我不喜欢以这种方式混合前端和后端的想法。特别是因为这意味着我突然不得不为管理员用户模型提供以前对前端用户唯一的所有字段和关系。

这似乎不是正确的做事方式。我可以切换到不同的身份验证系统或将管理员分离到具有自己配置的包中,但项目范围不允许进行此类耗时的更改。

我欢迎您提供任何想法。

【问题讨论】:

这可能会有帮助***.com/questions/18785754/… 【参考方案1】:

如果不同的用户实体很少或从不需要看到相同的界面,您应该考虑将应用拆分为两个代码库。他们显然仍然会查​​询同一个数据库。

这不仅可以解决您的身份验证问题,还可以让代码的维护变得更加容易。例如,在将更新推送到管理控制台时,您只需将该应用程序置于维护模式,同时保持(可能)更关键的前端正常运行。

【讨论】:

这其实是一个非常好的点。我们驳回了拆分这些代码库的想法,因为在我们的案例中,好处超过了关注点。但是,关于单独维护模式的观点可能会影响规模。【参考方案2】:

这也是我最近遇到的一个问题。整个单独的环境并不容易,尤其是如果您已经拥有开发和生产环境。

不过,我确实花了一些时间创建一个包来解决这个问题,您可以在 https://github.com/ollieread/multiauth 找到它。包本身本质上是 Auth 的工厂类,它允许您使用它的多个实例,因此您可以像这样访问它:

Auth::admin()->check();
Auth::user()->check();
Auth::whatever()->check();

我希望该软件包可以帮助您或其他正在寻找这种方法的人。

【讨论】:

【参考方案3】:

我不确定,但也许有用。为什么不尝试为管理员创建单独的环境。然后你就会有 app/config/admin/session.php 和 app/config/session.php 之类的东西用于生产(这是默认环境)。

您可以在这里查看如何设置环境http://andrewelkins.com/programming/php/how-to-set-laravel-4-environments/

但正如我所说,这只是一个想法,我不太确定 :)

【讨论】:

环境显然是要走的路。设置 admin.yoursite.com 并相应地更改配置文件。这假设您没有将自定义方法添加到特定于角色的用户类。

以上是关于Laravel 4 中的多个身份验证会话的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.1 身份验证会话数据不会跨请求持久化

Laravel - 使用会话令牌进行身份验证

Laravel 5:使用 Laravel 会话数据的 Socket.io 客户端身份验证

在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置会话数据

与 PHP 共享 Laravel 身份验证/会话

Laravel 7 手动身份验证会话问题