Laravel 子域:跨所有子域的单一身份验证不起作用?

Mak*_*kka 6 php authentication subdomain session laravel

我正在构建一个具有动态子域系统的站点,例如 (name.domain.com)。我将 Ubuntu 与 laravel 的 serve 命令一起使用。

我在我的路线中设置了所有内容:

Route::domain('{x}.localhost')->group(function (){
    Route::get('/url/',  'SomeController@someAction')->middleware('can:xyz,x')->name('someName');
});
Run Code Online (Sandbox Code Playgroud)

现在,一切都很好,除了 Auth 被子域锁定

eg(xyz.localhost:8000/ , localhost:8000/) 需要单独登录。

在我阅读了一些谷歌搜索之后,我可以在“域”下的 config/session.php 文件中覆盖它。因此,在我的 .env 文件中,我为 SESSION_DOMAIN 设置了一个新的 var 并将其指向“.localhost”或“.localhost:800”,或者只是为了测试我得到与建议相同的 IP 127.0.0.1 / :8000 但是当我尝试在登录后立即登录我的会话无效,例如(我登录并重定向到正确的路线,但我的身份验证发现我没有登录)

会话配置

'domain' => env('SESSION_DOMAIN', null),
Run Code Online (Sandbox Code Playgroud)

我的 .env

SESSION_DOMAIN=.localhost
Run Code Online (Sandbox Code Playgroud)

似乎出于某种原因没有设置 cookie?

可能应该注意到这是同时使用文件和数据库进行会话的情况,我还每次都清除了缓存和会话存储以及 cookie 等。

- 在过去的几天里,我已经尝试了所有我能想到的方法来解决这个问题,但没有运气。即使在全新安装的 laravel 上也存在同样的问题。

我可以在主 URL 上使用 FF 登录,但在子 URL 上我没有登录,如果我尝试,我会得到 419。

有什么建议?亲切的问候,马特

-编辑

要在新安装的 laravel 上重现,首先,安装 auth 包:

composer require laravel/ui

php artisan ui vue --auth
npm run dev
Run Code Online (Sandbox Code Playgroud)

接下来,使用您的 Mysql 数据库信息编辑您的 .env 文件,并将此行添加到文件中:

SESSION_DOMAIN=.localhost
Run Code Online (Sandbox Code Playgroud)

最后将它添加到您的 web.php 路由文件中。

Route::domain('{foobar}.localhost')->group(function (){
    Route::get('/test/',  'HomeController@index');
});
Run Code Online (Sandbox Code Playgroud)

(我喜欢在命令行中创建一个帐户)然后推送默认迁移并运行服务器并通过登录主页和任何子域进行测试。

TEF*_*EFO 4

好吧,这是因为 localhost 域,而是使用虚拟域(例如 Something.test),然后设置 SESSION_DOMAIN=.something.test 并清除缓存。localhost 和 127.0.0.1 不是同源,因此无法设置会话。

  • 您好,TEFO,感谢您的回复。请您详细说明一下好吗?我不确定我是否在关注你。当我测试时,我只使用 localhost,127.0.0.1 只是尝试看看它是否有效。我尝试在主机文件中设置一个主机并将其指向 127.0.0.1:8000,但我遇到了同样的问题。亲切的问候。 (2认同)