跳转到内容

登录与设备

管理密码、Passkey 和登录设备;需要移出设备或恢复登录时查阅本页。

Calends 是单用户应用:只有一个主人,一个密码,可以绑定多个 Passkey。登录相关的设置都在「设置 → 安全」。

  • 至少 8 位,以 PBKDF2-SHA256 加盐哈希保存,服务端不保存明文。
  • 「修改密码」需要先输入当前密码。修改后,除当前设备外的所有登录都会失效。
  • 首次设置密码需要初始化令牌,见首次设置。

界面没有邮件找回入口。「修改密码」即使在已登录设备上也要求当前密码。如果有可用的 Passkey,可以继续登录并先导出备份。

需要重设密码时,在你控制的数据库中删除密码记录,再用 SETUP_TOKEN 初始化。操作只删除密码哈希,不删除账本数据,也不会主动撤销已有会话或 Passkey。

  1. 确认可以读取或重新配置 SETUP_TOKEN,并先备份数据库。

  2. 在部署目录执行对应命令:

    终端窗口
    # Cloudflare
    npx wrangler d1 execute DB --remote --command "DELETE FROM kv WHERE key = 'auth'"
    # Docker(DATA_DIR 使用默认 /data 时)
    docker exec calends node_modules/.bin/wrangler d1 execute DB --local --persist-to /data \
    --command "DELETE FROM kv WHERE key = 'auth'"
  3. 打开 /admin,输入初始化令牌并设置新密码。

  4. 检查「登录设备」和 Passkey 列表,移除不再需要的访问。

「添加 Passkey」后,可以在登录页选「用 Passkey 登录」,用面容、指纹或设备密码登录。列表里显示每个 Passkey 的添加时间和上次使用时间,不用的可以「移除」。

Passkey 绑定在站点的域名上,必须通过 HTTPS 访问。换了域名之后,旧的 Passkey 在新域名上无法使用:先用密码登录,再在新域名上重新添加。

「登录设备」列出所有还有效的登录:浏览器和系统、登录方式(密码或 Passkey)、登录时间、最近活跃时间,以及按 IP 估算的位置(仅供参考)。当前设备标为「本机」。

  • 移出:让某一台设备立即退出登录。当前设备不能移出,请用「退出登录」。
  • 退出其他所有设备:只保留当前设备。
  • 最多同时登录:1、2、3、5、10 或 20 台,缺省 10 台。超过上限时,最久没有活动的设备会被自动退出;调低上限后立即生效。

每次登录有效期 180 天。会话令牌放在 HttpOnly、SameSite=Lax 的 Cookie 里(HTTPS 下加 Secure),服务端只保存它的哈希。

同一个 IP 在 15 分钟内失败 6 次后会被暂时锁住,提示「尝试过多,请 15 分钟后再试」。密码登录、Passkey 登录和首次设置共用这个限制。

部署在 Cloudflare 上时,Calends 从 Cloudflare 提供的请求头读取访客的真实 IP。自托管在反向代理后面时,需要设置 TRUST_PROXY=1,才会信任 X-Forwarded-For;否则所有访客都会被当作代理服务器的同一个 IP。不在代理后面时不要设置它,否则别人可以伪造这个请求头绕过限速。见配置项。