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 未显示在钩子的句柄函数中的主要内容,如果未能解决你的问题,请参考以下文章

Sveltekit Tailwind 配置变量不起作用

超过页面加载时间阈值时的 SvelteKit 加载指示器

SvelteKit 并在服务器端渲染中缓存组件输出

Cookie 未出现在 Chrome 控制台资源选项卡中

Cookie 未保存在 Xamarin(Android)的 Web 视图中

cookie 未显示在 chrome 开发者工具中