忘记密码怎么办?

16 阅读

概览

作为 Halo 站点的管理员,你可能会遇到两类密码重置场景:

  • 站点用户忘记密码:用户无法通过自助找回(未绑定邮箱或邮件服务未配置),需要你在控制台手动为其重置;

  • 管理员账号无法登录:站点中所有具有用户管理权限的管理员账号均无法正常登录,需要通过直接修改数据库来紧急恢复访问。

在控制台重置用户密码

当用户反馈无法登录且无法自助找回时,具有用户管理权限的管理员可以直接在控制台为其重置密码。

操作步骤

  1. 使用管理员账号登录 Halo 控制台;

  2. 进入用户管理页面(路径:控制台 → 用户);

  3. 找到需要重置密码的用户,点击右侧操作菜单,选择 修改密码

  4. 填写新密码并确认,通知用户使用新密码登录。

详细的操作说明可参考修改用户密码

配置邮件通知后,已完成邮箱验证的用户可以在登录页面自行找回密码,减少管理员的干预成本。配置路径:控制台 → 设置 → 通知设置

通过数据库紧急重置密码

直接修改数据库存在一定风险,操作前建议先备份数据。此方法仅建议在站点中所有管理员账号均无法登录控制台的紧急情况下使用。

当没有任何管理员账号能够正常登录时,可以通过直接更新数据库记录的方式强制重置密码,恢复对控制台的访问。

以下 SQL 语句将 admin 用户的密码重置为 password执行后请立即登录并修改为更安全的密码

PostgreSQL

UPDATE
  extensions
SET
  data = convert_to(
      jsonb_set(
          convert_from(data, 'UTF-8') :: jsonb,
          '{spec,password}',
          '"{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO"'
      ) :: text,
      'UTF-8'
  )
WHERE
  name LIKE '/registry/users/admin';

MySQL

UPDATE
   extensions
SET
   data = JSON_SET(
       CONVERT(data USING utf8mb4),
       '$.spec.password',
       '{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO'
   )
WHERE
   name LIKE '/registry/users/admin';

说明

  • 如需重置其他用户的密码,将 WHERE 子句中的 admin 替换为对应的用户名;

  • 密码哈希值 {bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO 对应的明文密码为 password

  • 执行成功后,使用 password 登录控制台,并立即前往 用户中心 修改为强密码。

如何连接数据库?

  • Docker 部署:如果数据库运行在容器中,可通过 docker exec -it <容器名> bash 进入容器后执行 SQL;

  • 外部数据库:临时开启数据库的外部访问端口,使用数据库客户端工具(如 DBeaver、TablePlus 等)连接后执行,执行完毕后务必关闭数据库端口


评论