【发布时间】:2021-10-19 10:01:42
【问题描述】:
我正在开发一个 web 应用程序 (Laravel/Vue),每个组织都有一个子域(companyone.mydomain.com、companytwo.mydomain.com、...)
作为身份验证系统,我使用带有 cookie 的 Laravel Sanctum。在本地主机上设置 cookie 时,在本地使用子域时不起作用。
我的后端在localhost:8000 上运行,而前端在localhost:8080 上运行。出于 cors 的原因,我在 vue.config.js
module.exports = {
devServer: {
disableHostCheck: true,
proxy: 'http://localhost:8000',
},
};
我更改了/etc/hosts 文件,以便可以在本地模拟子域
127.0.0.1 localhost
127.0.0.1 mydomain.com
127.0.0.1 companyone.mydomain.com
127.0.0.1 companytwo.mydomain.com
在后端,我在.env 文件中添加了以下几行(并重新启动了php artisan serve 脚本)
SESSION_DOMAIN=.mydomain.com
SANCTUM_STATEFUL_DOMAINS=mydomain.com
在 Authcontroller 中,我像这样返回 cookie
$token = $user->createToken(Str::random(10))->plainTextToken;
$cookie = cookie('mydomain_api', $token, 60 * 24);
return response([
'token' => $token,
'user' => new AuthResource($user)
], 200)->withCookie($cookie);
cookie设置如下
$domain = null
$secure = true
$httpOnly = true
$sameSite = 'None'
当调用登录函数时,我在浏览器中收到这样的 cookie
但应用程序 -> Cookies 保持为空
请求头
向 api 发送另一个请求时,不添加任何 cookie。 如何获取 Cookies 存储中的 cookie?
[编辑 1] 将后端的域硬编码为 mydomain.com 时,我在浏览器中收到以下错误
【问题讨论】:
-
嗯。为什么第一张图片中的域是“localhost”?
-
@user202729 我不知道,但是在将域硬编码为
mydomain.com时出现错误。见[编辑 1] -
看来你应该在浏览器中访问带有
companyone.mydomain.com的网站?你已经这样做了吗…… -
@user202729 这就是我正在做的。所有的请求都是从
companyone.mydomain.com发送的,实际上是从companyone.mydomain.com:8080发送的 -
奇怪?可能是因为只有一个点。 stackoverflow.com/a/1188145/5267751
标签: laravel vue.js cookies laravel-sanctum