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

Alo*_*hor 3 javascript cookies node.js svelte sveltekit

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

当我运行时登录并且一切正常npm run dev ,但是当我运行npm run dev -- --host时登录不起作用。

cookies.set('jwt', value, { path: '/' });
Run Code Online (Sandbox Code Playgroud)

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

使用选项时如何使登录正常工作--host

Jax*_*axx 6

localhost我假设您在不安全的 ( ) 连接上寻址暴露的网络 IP URL(应该仍然有效)时被阻止登录http

原因是 SvelteKit 中的默认 cookie 配置是将选项设置securetrue,这意味着 cookie 不会在不安全的请求上设置。来自SvelteKit 文档

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

正如您所看到的,这解释了为什么默认配置适用于localhost(where secureis false) 但不适用于公开的网络 IP 地址 (where securewill be true)。

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

cookies.set('jwt', value, { secure: false, path: '/' });
Run Code Online (Sandbox Code Playgroud)

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

注意:在生产部署中,您需要secure标志设置为true并针对您的请求使用安全协议 ( https)。