【发布时间】:2020-09-28 17:23:48
【问题描述】:
我正在构建一个带有动态子域系统的站点,例如 (name.domain.com)。我正在使用带有 laravel 的 serve 命令的 Ubuntu。
我已经在我的路线中设置了所有这些:
Route::domain('{x}.localhost')->group(function (){
Route::get('/url/', 'SomeController@someAction')->middleware('can:xyz,x')->name('someName');
});
现在,一切都很好,除了 Auth 被子域锁定
eg(xyz.localhost:8000/ , localhost:8000/) 需要单独登录。
经过一番谷歌搜索后,我可以在“域”下的 config/session.php 文件中覆盖它。因此,在我的 .env 文件中,我为 SESSION_DOMAIN 设置了一个新变量,并将其指向“.localhost”或“.localhost:800”,或者只是为了测试我得到与建议的 IP 127.0.0.1 / :8000 相同的结果,但是当我尝试登录我的会话在登录后立即无效,例如(我登录并被重定向到正确的路线,但我的身份验证发现我没有登录)
会话配置
'domain' => env('SESSION_DOMAIN', null),
我的 .env
SESSION_DOMAIN=.localhost
似乎由于某种原因没有设置 cookie?
应该注意这是同时使用文件和数据库进行会话的情况,我还每次都清除了我的缓存和会话存储以及 cookie 等。
-- 在过去的几天里,我已经尝试了所有我能想到的方法来解决这个问题,但没有成功。即使在全新安装的 laravel 上也存在同样的问题。
我可以在主 URL 上使用 FF 登录,但在子 URL 上我没有登录,如果我尝试会得到 419。
有什么建议吗?亲切的问候,马特
-编辑
要在新安装的 laravel 上重现,首先,安装 auth 包:
composer require laravel/ui
php artisan ui vue --auth
npm run dev
接下来,用你的 Mysql 数据库信息编辑你的 .env 文件,并将这一行添加到文件中:
SESSION_DOMAIN=.localhost
最后将它添加到你的 web.php 路由文件中。
Route::domain('{foobar}.localhost')->group(function (){
Route::get('/test/', 'HomeController@index');
});
(我喜欢在这里在命令行中创建一个帐户) 然后推送默认迁移并通过登录主页和任何子域来运行服务器和测试。
【问题讨论】:
-
不幸的是,我已经尝试过了,您可以在
SESSION_DOMAIN下的 .env 中设置域值。这是有关会话的当前会话配置文件。 ``` '域' => env('SESSION_DOMAIN', null), ```
标签: php laravel authentication session subdomain