我有一个 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');
这些管理员在不同域中是通用的。也就是说,用户名在管理员模型内是唯一的。
这个方式很好用,但需要更新一下。
我希望登录和注销在不同网站之间保持一致。也就是说,如果管理员已经登录了一个网站的管理办公室,他们已经登录了所有网站的管理办公室,并且如果他们注销,他们已经从所有网站注销了。
我尝试更新我的筛选器:
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。
我担心如果管理员已登录,则他们将获得任何站点办公室访问权限。
我的意图是编写一个额外的过滤器“可以管理此站点”,以检查此关系。您认为在提议的管理员跨域身份验证的背景下,这是一项合适的措施吗?
.domain.com
。 另一个选项是创建新的身份验证guard/model,生成/检查单独的JWT cookie。 - Sigismund