我有一个管理多个域的laravel Web服务器,例如:
site1.domain.com, site2.domain.com, site3.domain.com
我非常成功地将网站名称添加到用户身份验证过程中,因此每个用户都有一个与网站相关的表。跨站点的用户没有持久性,并且它们被认为是唯一的。这很有效。
对于每个站点,都有一个后端,例如
site1.domain.com/office
为此,我有一组不同的模型Admin用户。为了使这项工作,我有一组完全不同的auth路径,一个不同的控制器和所有这些。我通过以下过滤器实现了这一目标。
App::before(function($request)
{
if ($request->is('office*'))
{
Config::set('auth.driver', 'eloquent.admin');
Config::set('auth.model', 'Admin');
这些管理员在各个域中都很常见。也就是说,用户名在管理模型中是唯一的。
这很有效,但需要继续前进。
我希望登录和注销在站点之间保持一致。也就是说,如果管理员已经登录到一个站点办公室,他们已经登录了所有站点办公室,并且他们已经注销了,他们已经全部注销了。
我试图更新我的过滤器:
App::before(function($request)
{
if ($request->is('office*'))
{
Config::set('auth.driver', 'eloquent.admin');
Config::set('auth.model', 'Admin');
Config::set('session.path', '/office');
Config::set('session.domain', '.domain.com'); // tried without leading . too
}
});
但是,如果我在浏览器中分析我的cookie,则域和路径信息不会受到影响,并分别保留为site.domain.com和/。
您能否告诉我如何根据我的请求更改会话cookie属性?
存在网站依赖性。管理员和网站之间存在多对多的关系,这决定了管理员可以访问特定网站的/办公室。
我担心管理员已登录,他们将可以访问任何网站办公室。
我的目的是写一个额外的过滤器“可以管理这个网站”,它将检查这种关系。
您认为这是针对管理员提议的跨域身份验证的上下文的合适度量吗?
答案 0 :(得分:0)
如果您打开app/config/session.php
您使用的是什么驱动程序?某些文件(如文件)似乎不会将数据存储在通配符子域中。
我通过使用Redis解决了这个问题(如果您使用的是Homestead,它应该已经可以使用了):
'driver' => 'redis',
'redis' => array(
'cluster' => true,
'default' => array(
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
),
),
这与不同驱动程序如何使用主机名引用会话数据有关。