【问题标题】:Sveltekit newly created cookie is not showing in the hook's handle functionSveltekit 新创建的 cookie 未显示在钩子的句柄函数中
【发布时间】:2022-01-20 23:08:10
【问题描述】:

总结

一旦在响应中发送 set-cookie 标头,它会在 cookie 在 hooks.ts 文件中的 handle() 函数中可见之前接受另一个请求。

示例

  1. 用户 POST 用户名和密码到登录端点;
  2. Enpoint 响应设置 access_token cookie 标头;
  3. 应将用户重定向到受保护的页面。 (失败

失败是因为 auth guard 检查 cookie 是否存在,但此时从代码端看不到,只能在浏览器端看到。

  1. 刷新页面

  2. 用户现在可以被重定向到受保护的页面。

Minimal reproduction

它具有虚拟登录/注销功能和受保护的用户配置文件。还有服务器端控制台日志显示 cookie 滞后 在挂钩中被识别。

【问题讨论】:

  • 我有一个非常相似的例子运行完美。第一眼看到的唯一区别是,在 login.ts 文件中进行身份验证时,我返回的是 status: 302 而不是 200。你也可以试试吗?如果它不起作用,请让我知道并在我这边运行您的代码以进行故障排除

标签: cookies svelte sveltekit


【解决方案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`
        }
    }
};

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多