首页 > 解决方案 > Laravel 与模块共享会话相同的域

问题描述

我的 2 个 laravel 项目的会话共享存在问题。我的第一个项目是 portal.blabla.test,我的另一个项目是 billing.blabla.test。

门户是身份验证。计费是在门户内加载的模块。

我使用 ajax 在门户项目中加载计费模块,但无法进行会话共享。Auth::check() 不起作用。

但是,如果我在浏览器中手动加载页面(billing.blabla.test),我就会登录。将我的模块集成到另一个共享相同身份验证的 laravel 项目中时似乎存在一些问题。

我为跨网站共享添加了 cors,我尝试在 ajax 调用上发送 csrf 令牌,我尝试将 session.php 中的值 'same_site' 更改为“lax”。

我使用 session_driver 数据库为 session.php 中的两个项目执行了此操作:

  return [
    //...
  '   domain' => '.blabla.test'
  ];

这是我加载模块的方式:

   $.ajax({
    headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
    url: "https://billing.blabla.test/billing",
    success: function(data) {
        $('#content-module').html(data);
    }
   });

这是我正在加载的页面:

  {{ Auth::check() }}

加载模块时我看到一个空白页面,但是在https://billing.blabla.test/billing时,我可以看到“1”。

标签: phplaravelauthenticationsession

解决方案


您必须将通配符子域放入您的 session.php 配置文件中,如下所示:

<?php

return [
  //...
  'domain' => '.blabla.test'
];

像这样,您可以在子域之间共享会话:)


推荐阅读