虽然我还没有进入更深的子域,但我已经对此进行了类似的设置。
您需要做的第一件事是为您的应用程序配置 tld 和通配符子域,因此无论您点击什么子域,您都应该始终看到索引内容。
为此的第一个设置是将 laravel 中的 SESSION_DOMAIN 设置为 .env 类似 .whatever.com
例如
SESSION_DOMAIN=.whatever.com
接下来你要做的就是确保你的应用使用 JWT Authentication https://github.com/tymondesigns/jwt-auth
当您在用户浏览器上保存令牌时,您需要将域设置为与您的SESSION_DOMAIN 相同。
无论他们尝试登录哪个子域,我都会获取 tld
const tld = (() => {
const host = window.location.host, subs = host.split('.')
if ( subs.length > 2 )
return host.replace(/^[^.]+\./g, "")
return host
})()
然后我在包含令牌的域 cookie 上的 tld 前面添加了 .
Cookies.set('token', token, { expires: remember ? 365 : null, domain: `.${tld}` })
因此,如果您从开发工具栏转到“应用程序”选项卡,然后在您的应用程序的 cookie 下,域应该是 .whatever.com,如果您从一个子域跳转到另一个子域,您仍然应该通过身份验证
另外,关于您的设置,我认为您只是在初始计划中过度使用子域。
您只需为 STORE 创建一个包含所有不同商店的表,然后为slug 添加一列。然后只需为其他东西创建一对多或多对多关系,例如用户表中的商店所有者,产品表中的存储产品等,因此您的存储表应该看起来像
id | name | slug
1 | My Store | store1
然后在前端,您将获取子域的 slug 并请求与您的 API 端点匹配的存储 slug 的查询,您的端点只需要一个结构,您不需要'不需要让每个商店都有自己的 api 端点,你只需要在每次点击你的端点时都包含 store slug 这是商店特定的请求,所以如果你点击 store1.whatever.com,你的所有查询应该使用 slug store1 拉取与商店相关的所有内容@
另外,你不需要为 admin 和 api 端点使用子域,尝试寻找一个 Vue+Laravel 模板,如下面的这个,它有很多功能,如 vue 路由、vuex 和模板我认为非常适合您的设置https://github.com/cretueusebiu/laravel-vue-spa
那么你应该以这样的方式处理它要好得多
前端 -> store1.whatever.com
管理员 -> store1.whatever.com/admin/
API 端点 -> whatever.com/api/