laravel 跨域身份验证 cookie 和过滤器
Posted
技术标签:
【中文标题】laravel 跨域身份验证 cookie 和过滤器【英文标题】:laravel cross domain auth cookies and filters 【发布时间】:2014-12-30 07:07:20 【问题描述】:我有一个管理多个域的 laravel 网络服务器,例如:
site1.domain.com, site2.domain.com, site3.domain.com
我非常成功地将站点名称添加到用户身份验证过程中,因此每个用户都有一个与站点相关的用户表。跨站点的用户没有持久性,他们被认为是唯一的。这很好用。
对于每个站点,都有一个后端,例如。
site1.domain.com/office
为此,我有一组不同的模型管理员用户。为了完成这项工作,我有一组完全不同的身份验证路径、不同的控制器等等。我通过以下过滤器实现了这一点。
App::before(function($request)
if ($request->is('office*'))
Config::set('auth.driver', 'eloquent.admin');
Config::set('auth.model', 'Admin');
这些管理员在各个域中都很常见。也就是说用户名在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 属性吗?
存在站点依赖性。管理员和站点之间存在多对多关系,这决定了管理员是否可以访问特定站点的 /office。
我担心如果管理员登录,他们将可以访问任何站点办公室。
我的目的是编写一个额外的过滤器“可以管理这个站点”来检查关系。
您认为在提议的管理员跨域身份验证的上下文中,这是一个合适的衡量标准吗?
【问题讨论】:
如果您不介意在站点之间共享所有用户,您可以将 cookie 域更改为.domain.com
。其他选项是创建新的身份验证保护/模型来生成/检查单独的 JWT cookie。
【参考方案1】:
如果您打开app/config/session.php
,您使用的是什么驱动程序?有些,例如文件,似乎没有跨通配符子域存储数据。
我使用 Redis 解决了这个问题(如果您使用的是 Homestead,它应该已经可供您使用):
'driver' => 'redis',
'redis' => array(
'cluster' => true,
'default' => array(
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
),
),
这与不同的驱动程序如何使用主机名来引用会话数据有关。
【讨论】:
以上是关于laravel 跨域身份验证 cookie 和过滤器的主要内容,如果未能解决你的问题,请参考以下文章
使用 laravel 5.1 和 jwt 使用 cookie 进行身份验证