在官方 SvelteKit 示例中使用 --host 选项运行时,未设置 Cookie

2024-02-10

我正在尝试官方 SvelteKit 示例https://realworld.svelte.dev/ https://realworld.svelte.dev/.
其代码托管于https://github.com/sveltejs/realworld https://github.com/sveltejs/realworld

登录,当我运行时一切正常npm run dev但当我跑步时npm run dev -- --host然后登录不起作用。

cookies.set('jwt', value, { path: '/' });

这不起作用,因此 cookie 未设置,因此登录不起作用。

使用时如何使登录正常工作--host option?


我假设您在访问暴露的网络 IP URL 时被阻止登录(localhost应该仍然可以工作)在无担保(http)连接。

这样做的原因是因为SvelteKit中默认的cookie配置是设置secure选项true,这意味着 cookie 不会根据不安全的请求进行设置。来自SvelteKit 文档 https://kit.svelte.dev/docs/types#public-types-cookies:

默认情况下,httpOnly 和 secure 选项为 true(除了在 http://localhost 上,其中 secure 为 false),如果您希望 cookie 可由客户端 JavaScript 读取和/或通过 HTTP 传输,则必须显式禁用它们。 SameSite 选项默认为 lax。

正如您所看到的,这解释了为什么默认配置可以工作localhost (where secure is false)但不在暴露的网络 IP 地址上(其中securetrue).

如果您更新 cookie 配置src/routes/login/+page.server.js显式设置secure option:

cookies.set('jwt', value, { secure: false, path: '/' });

并重新启动服务器,然后您应该能够按预期从公开的网络 IP URL 登录(我能够)。

Note:在生产部署中,您will想要secure标志设置为true并使用安全协议(https)以满足您的要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在官方 SvelteKit 示例中使用 --host 选项运行时,未设置 Cookie 的相关文章

随机推荐