导航
只把 userId 放进 cookie 不够。密码哈希派生的 session tag 可以让密码变更立即让旧会话失效。
长生命周期 cookie 必须能感知账号关键状态变化。对密码登录用户来说,密码哈希就是天然的版本源。
会话 payload 不需要存储密码哈希本身,只需要存一个由服务端命名空间派生出的 tag,验证时再和数据库当前哈希比对。
邮件重置和登录后修改密码都会更新 users.password,因此它们不需要额外维护黑名单。旧 cookie 的 tag 与新哈希不匹配,自然变成无效会话。