一、操作背景
Halo 后台登录提示无效凭证,常规页面找回需要邮箱收验证码,因未配置 SMTP 邮件服务无法接收验证码,采用直接操作 MySQL 数据库重置管理员密码。
环境信息
数据库容器名:
mysqlMySQL 登录账号:
root,密码:Shitou521!Halo 数据库名:
halo_85n664待重置账号:
yiran
二、步骤 1:进入 MySQL 数据库终端
在服务器终端执行命令,进入 MySQL 命令行:
docker exec -it mysql mysql -uroot -pShitou521!三、步骤 2:切换至 Halo 业务数据库
USE halo_85n664;四、步骤 3:查询当前所有系统管理员账号(确认目标账号存在)
SELECT name FROM extensions WHERE name LIKE '/registry/users/%';查询结果
/registry/users/anonymousUser
/registry/users/ghost
/registry/users/yiran目标账号存储路径:/registry/users/yiran
五、步骤 4:两次密码重置 SQL 执行记录
第一次重置:密码设置为 123456
UPDATE extensions
SET data = JSON_SET(convert(data using utf8mb4),'$.spec.password','{bcrypt}$2a$10$XWHHcjqR8Cx5DnisoRA7fehC1Pi0Kc9QRQOTlhoDdRwXYZzn0Xhfa')
WHERE name = '/registry/users/yiran';执行返回:Changed:1,代表密码修改成功。
第二次重置:密码改回默认 password(全小写)
UPDATE extensions
SET data = JSON_SET(convert(data using utf8mb4),'$.spec.password','{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO')
WHERE name = '/registry/users/yiran';七、关键必做操作:重启 Halo 容器刷新内存缓存(解决无效凭证报错)
直接修改数据库不会清空 Halo 程序内存里缓存的旧账号密码,必须重启容器加载最新配置:
bash
运行
docker restart halo-pro
等待 30 秒容器启动完成。
八、登录操作要求
打开浏览器无痕 / 隐私窗口(清除旧登录 Cookie 会话缓存)
访问后台地址,输入:
用户名:yiran
密码:password
登录后触发邮箱验证弹窗,因站点未配置 SMTP 邮件服务无法接收验证码,后续备选方案为新建超级管理员账号绕过邮箱校验。
未实施,就成功了,
sql
USE halo_85n664;
INSERT INTO extensions (`name`, `data`, `creation_timestamp`, `update_timestamp`) VALUES
('/registry/users/admin',
'{\"spec\":{\"displayName\":\"超级管理员\",\"email\":\"temp@qq.com\",\"password\":\"{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO\",\"roles\":[\"super-role\"]},\"apiVersion\":\"registry.halo.run/v1alpha1\",\"kind\":\"User\",\"metadata\":{\"name\":\"admin\"}}',
UNIX_TIMESTAMP()*1000,
UNIX_TIMESTAMP()*1000);
执行完成后依旧执行 docker restart halo-pro,使用新账号admin、密码password直接登录后台,无需邮箱验证。