laravel跨域auth cookie和过滤器

ste*_*ell 6 authentication cross-domain laravel-4

我有一个管理多个域的laravel Web服务器,例如:

site1.domain.com, site2.domain.com, site3.domain.com
Run Code Online (Sandbox Code Playgroud)

我非常成功地将站点名称添加到用户身份验证过程中,因此每个用户都有一个与站点相关的表.跨站点的用户没有持久性,并且它们被认为是唯一的.这很好用.

对于每个站点,都有一个后端,例如.

site1.domain.com/office
Run Code Online (Sandbox Code Playgroud)

为此,我有一组不同的模型Admin用户.为了使这项工作,我有一组完全不同的auth路径,一个不同的控制器和所有这些.我通过以下过滤器实现了这一点.

App::before(function($request)
{
  if ($request->is('office*'))
  {
    Config::set('auth.driver', 'eloquent.admin');
    Config::set('auth.model', 'Admin');
Run Code Online (Sandbox Code Playgroud)

这些管理员在各个域中都很常见.也就是说,用户名在管理模型中是唯一的.

这很好用,但需要继续前进.

我希望登录和注销在站点之间保持一致.也就是说,如果管理员已经登录到一个站点办公室,他们已经登录到所有站点办公室并且他们注销了,他们已经全部注销了.

我试图更新我的过滤器:

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
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我在浏览器中分析我的cookie,则域和路径信息不会受到影响,并分别保留为site.domain.com和/.

您能否告诉我如何根据我的请求更改会话cookie属性?

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

我担心的是,管理员已登录,他们将可以访问任何站点办公室.

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

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

Ewa*_*ine 0

如果你打开app/config/session.php你使用什么驱动程序?有些(例如文件)似乎不跨通配符子域存储数据。

我通过使用 Redis 解决了这个问题(如果您使用的是 Homestead,它应该已经可供您使用):

'driver' => 'redis',

    'redis' => array(

    'cluster' => true,

    'default' => array(
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ),

),
Run Code Online (Sandbox Code Playgroud)

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