laravel跨域auth cookie和过滤器

时间:2014-11-03 15:29:34

标签: authentication laravel-4 cross-domain

我有一个管理多个域的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属性?

存在网站依赖性。管理员和网站之间存在多对多的关系,这决定了管理员可以访问特定网站的/办公室。

我担心管理员已登录,他们将可以访问任何网站办公室。

我的目的是写一个额外的过滤器“可以管理这个网站”,它将检查这种关系。

您认为这是针对管理员提议的跨域身份验证的上下文的合适度量吗?

1 个答案:

答案 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,
    ),

),

这与不同驱动程序如何使用主机名引用会话数据有关。