refactor: 清理旧版兼容性,升级为 bcrypt 密码算法
- 密码哈希从 MD5+SHA1 升级为 bcrypt - 删除 super_admins/users 表中的 salt 字段 - 删除旧版升级文件(upgrade.php, check_upgrade, execute_upgrade, sql/upgrades/) - 删除 PASSWORD_SALT 配置项 - 清理所有'兼容 Python 版'注释 - 新项目独立,无历史包袱
This commit is contained in:
@@ -40,16 +40,13 @@ func (s *SuperAdminService) EnsureDefaultAdmin() error {
|
||||
|
||||
logger.Sugared.Warnf("⚠️ 当前使用默认超级管理员密码,部署环境请务必修改 SUPER_ADMIN_DEFAULT_PASSWORD 并重启服务")
|
||||
|
||||
// 为超级管理员生成独立的随机 Salt
|
||||
salt, err := crypto.GenerateRandomPassword(16)
|
||||
passwordHash, err := crypto.HashPassword(cfg.SuperAdminDefaultPass)
|
||||
if err != nil {
|
||||
return fmt.Errorf("生成随机盐值失败: %w", err)
|
||||
return fmt.Errorf("密码哈希失败: %w", err)
|
||||
}
|
||||
passwordHash := crypto.HashPassword(cfg.SuperAdminDefaultPass, salt)
|
||||
if err := s.superAdminRepo.EnsureDefaultAdmin(
|
||||
cfg.SuperAdminDefaultUser,
|
||||
passwordHash,
|
||||
salt,
|
||||
"系统管理员",
|
||||
); err != nil {
|
||||
return fmt.Errorf("创建默认超级管理员失败: %w", err)
|
||||
@@ -82,7 +79,7 @@ func (s *SuperAdminService) Login(username, password, ip, userAgent string) (map
|
||||
return map[string]interface{}{"success": false, "message": "用户名或密码错误"}, nil
|
||||
}
|
||||
|
||||
if !crypto.VerifyPassword(password, admin.PasswordHash, admin.Salt) {
|
||||
if !crypto.VerifyPassword(password, admin.PasswordHash) {
|
||||
s.logService.WriteLoginLog(username, 0, ip, userAgent, "用户名或密码错误")
|
||||
return map[string]interface{}{"success": false, "message": "用户名或密码错误"}, nil
|
||||
}
|
||||
@@ -120,7 +117,7 @@ func (s *SuperAdminService) Login(username, password, ip, userAgent string) (map
|
||||
}, nil
|
||||
}
|
||||
|
||||
// ChangePassword 超级管理员修改密码(操作 super_admins 表,使用独立 salt)
|
||||
// ChangePassword 超级管理员修改密码
|
||||
func (s *SuperAdminService) ChangePassword(adminID int, oldPassword, newPassword string, force bool) error {
|
||||
admin, err := s.superAdminRepo.GetByID(adminID)
|
||||
if err != nil {
|
||||
@@ -129,7 +126,7 @@ func (s *SuperAdminService) ChangePassword(adminID int, oldPassword, newPassword
|
||||
|
||||
// 验证原密码(强制改密时跳过)
|
||||
if !force {
|
||||
if !crypto.VerifyPassword(oldPassword, admin.PasswordHash, admin.Salt) {
|
||||
if !crypto.VerifyPassword(oldPassword, admin.PasswordHash) {
|
||||
return fmt.Errorf("原密码错误")
|
||||
}
|
||||
}
|
||||
@@ -139,14 +136,12 @@ func (s *SuperAdminService) ChangePassword(adminID int, oldPassword, newPassword
|
||||
return fmt.Errorf("%s", msg)
|
||||
}
|
||||
|
||||
// 生成新的独立 salt
|
||||
newSalt, err := crypto.GenerateRandomPassword(16)
|
||||
newHash, err := crypto.HashPassword(newPassword)
|
||||
if err != nil {
|
||||
return fmt.Errorf("生成随机盐值失败: %w", err)
|
||||
return fmt.Errorf("密码加密失败: %w", err)
|
||||
}
|
||||
newHash := crypto.HashPassword(newPassword, newSalt)
|
||||
|
||||
if err := s.superAdminRepo.UpdatePasswordWithSalt(adminID, newHash, newSalt); err != nil {
|
||||
if err := s.superAdminRepo.UpdatePassword(adminID, newHash); err != nil {
|
||||
return fmt.Errorf("密码修改失败")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user