Kaynağa Gözat

修复 GORM 主键污染

urbanu 1 ay önce
ebeveyn
işleme
4451af4130
1 değiştirilmiş dosya ile 16 ekleme ve 15 silme
  1. 16 15
      apis/daytask/auth.go

+ 16 - 15
apis/daytask/auth.go

@@ -198,21 +198,22 @@ func (s *Server) SendSmsCode(c *gin.Context) {
 	} else {
 		// 发送邮件验证码
 		var smtpHost, smtpPortStr, smtpUser, smtpPass, smtpFrom string
-		var config entity.DtConfig
-		if err := db.Where("`key` = ?", entity.ConfigKeySmtpHost).First(&config).Error; err == nil {
-			smtpHost = config.Value
-		}
-		if err := db.Where("`key` = ?", entity.ConfigKeySmtpPort).First(&config).Error; err == nil {
-			smtpPortStr = config.Value
-		}
-		if err := db.Where("`key` = ?", entity.ConfigKeySmtpUser).First(&config).Error; err == nil {
-			smtpUser = config.Value
-		}
-		if err := db.Where("`key` = ?", entity.ConfigKeySmtpPass).First(&config).Error; err == nil {
-			smtpPass = config.Value
-		}
-		if err := db.Where("`key` = ?", entity.ConfigKeySmtpFrom).First(&config).Error; err == nil {
-			smtpFrom = config.Value
+		// 批量查询所有smtp配置,避免复用同一struct导致GORM主键污染
+		var smtpConfigs []entity.DtConfig
+		db.Where("`group` = ?", "smtp").Find(&smtpConfigs)
+		for _, cfg := range smtpConfigs {
+			switch cfg.Key {
+			case entity.ConfigKeySmtpHost:
+				smtpHost = cfg.Value
+			case entity.ConfigKeySmtpPort:
+				smtpPortStr = cfg.Value
+			case entity.ConfigKeySmtpUser:
+				smtpUser = cfg.Value
+			case entity.ConfigKeySmtpPass:
+				smtpPass = cfg.Value
+			case entity.ConfigKeySmtpFrom:
+				smtpFrom = cfg.Value
+			}
 		}
 		if smtpFrom == "" {
 			smtpFrom = "Vitiens"