忘记密码
内置管理员忘记密码时,清空密码哈希并重启以恢复出厂密码;管理员为其他用户重置密码。
内置管理员忘记密码
密码在数据库里是 argon2id 哈希,无法手写。但内置管理员的出厂密码是在启动时播种的:内置管理员尚未设置密码时,启动会把它设为出厂密码 imgyoung123 并标记为必须改密。所以清空它的 password_hash 再重启,就回到首次登录的状态。
没有专门的重置命令:一条 SQL 就能完成。这条路径需要服务器的 shell 或数据库的访问权限,也就是对机器的控制权,不构成远程攻击面。
内置管理员在 users 表里的 ID 固定为 default。它的登录名可以在后台改,所以下面按 ID 定位,而不是按登录名。
重启后到你改掉密码之前,任何人都能用公开的出厂密码登录并抢先改密。重启后立即登录改密。
需要本机装有 sqlite3。先停止 imgyoung 进程,对数据目录(默认是启动目录下的 data/,或 IMGYOUNG_DATA_DIR 指定的目录)里的数据库执行:
sqlite3 data/imgyoung.db "UPDATE users SET password_hash = '' WHERE id = 'default';"然后重新启动 imgyoung。
启动日志里出现 已初始化默认管理员密码,请登录后立即在后台修改 即表示播种完成。用内置管理员的登录名(默认 admin)和 imgyoung123 登录,页面会直接进入「设置管理员密码」,改完后用新密码重新登录。
强制改密由服务端执行:在改掉出厂密码之前,这个会话只能退出、查看自己的账号(GET /api/admin/me)和改密,其余后台接口一律返回 403 须先修改出厂默认密码,用脚本直接调接口也一样。
这个办法只对内置管理员有效。其他用户的 password_hash 被清空后只会变成无法登录,不会恢复任何密码。
为其他用户重置密码
管理员可以在后台为任何用户(包括另一个管理员)重置密码:「用户」页,在该用户行末尾点开操作菜单(「更多操作」),选「重置密码」,输入新密码(至少 8 位)。
- 重置立即生效,该用户的全部会话随即失效,需要用新密码重新登录;
- 重置的密码不要求用户登录后再改;
- 每次重置记一条审计日志(动作
user.update,详情password.reset)。
用户自己记得旧密码时,可以在侧栏的账号菜单里选「修改密码」自行修改。对应接口见接口参考。