2 回答
TA贡献1801条经验 获得超16个赞
这看起来像一个 cookie 问题!
因此,有两种方法可以使用 cookie 在浏览器中保持状态。会话数据存储在服务器上,通常使用一些键来检索与用户状态相关的值。Cookies存储在客户端,并在请求中发送以确定用户状态。ExpressJS 支持使用这两者的能力。对于 JWT,您当然想使用 cookie 方法!
让我们先来看看您的 cookie 选项:
// return { name: config.tokenKey, val: token, options: { httpOnly: true } };
const cookieOptions = {
httpOnly: true
}
到目前为止,这看起来不错。您正在遵循将令牌存储为 http only 的最佳实践,但要正确存储 cookie,您可能需要在 cookie 选项中添加更多内容。
这是 express 文档中 cookie 选项的链接。查看“过期”的描述:
格林威治标准时间 cookie 的到期日期。如果未指定或设置为 0,则 创建会话 cookie。
基本上发生的事情是您没有指定到期时间,因此您的 cookie 被设置为 session cookie。这意味着每当用户关闭浏览器时,cookie 就会被销毁。
奖金:
如果您的网站使用 HTTPS,请确保将 cookie 设置为secure: true
如果它适用于您的团队,您可能还需要检查 sameSite 属性。
TA贡献1852条经验 获得超1个赞
我看不出您的代码有什么问题,但是过去需要注意的一些事情一直困扰着我;
确保您的客户在登录呼叫仍在进行时不会开始下一个呼叫。还要确保正确的错误处理以向客户端显示登录失败。
如果您有代理(如 nginx、haproxy),请确保
vary
标头配置正确通过配置和标头确保服务器和浏览器中没有发生缓存
no-cache
max-age
添加回答
举报