Sveltekit 新创建的 cookie 未显示在钩子的句柄函数中
Posted
技术标签:
【中文标题】Sveltekit 新创建的 cookie 未显示在钩子的句柄函数中【英文标题】:Sveltekit newly created cookie is not showing in the hook's handle function 【发布时间】:2022-01-20 23:08:10 【问题描述】:总结
一旦在响应中发送 set-cookie 标头,它会在 cookie 在 hooks.ts
文件中的 handle()
函数中可见之前接受另一个请求。
示例
-
用户 POST 用户名和密码到登录端点;
Enpoint 响应设置 access_token cookie 标头;
应将用户重定向到受保护的页面。 (失败)
失败是因为 auth guard 检查 cookie 是否存在,但此时从代码端看不到,只能在浏览器端看到。
刷新页面
用户现在可以被重定向到受保护的页面。
Minimal reproduction
它具有虚拟登录/注销功能和受保护的用户配置文件。还有服务器端控制台日志显示 cookie 滞后 在挂钩中被识别。
【问题讨论】:
我有一个非常相似的例子运行完美。第一眼看到的唯一区别是,在 login.ts 文件中进行身份验证时,我返回的是status: 302
而不是 200。你也可以试试吗?如果它不起作用,请让我知道并在我这边运行您的代码以进行故障排除
【参考方案1】:
如 cmets 中所述,您的服务器返回 HTTP 状态代码 200,它不会在登录后重定向客户端。由于状态码,浏览器假定它已经到达最终目的地。
在这种情况下,最佳做法是使用状态码 302:Wikipedia
修改/src/routes/auth/login.ts
import * as cookie from 'cookie';
export const post = (request) =>
return
status: 302,
headers:
location: '/',
'set-cookie': `$cookie.serialize('token', 'VALUE_OF_THE_COOKIE'; path=/; HttpOnly`
;
export const del = (request) =>
return
status: 302,
headers:
location: '/',
'set-cookie': `$cookie.serialize('token', ''; path=/; HttpOnly; maxAge: 0`
;
【讨论】:
以上是关于Sveltekit 新创建的 cookie 未显示在钩子的句柄函数中的主要内容,如果未能解决你的问题,请参考以下文章