feat: 更新验证码逻辑,优化邮件验证功能,增加验证码冷却时间,改进用户体验Closes #17

This commit is contained in:
2025-09-24 09:33:09 +08:00
parent 291f52395b
commit e44637fb2a
19 changed files with 138 additions and 58 deletions

View File

@ -14,7 +14,8 @@ const (
RoleEditor = "editor" // 能够发布和管理自己内容的用户
RoleAdmin = "admin"
DefaultFileBasePath = "./data/uploads"
EnvKeyBaseUrl = "BASE_URL" // 环境变量基础URL
EnvKeyBaseUrl = "BASE_URL" // 环境变量基础URL
EnvKeyPasscode = "\"CAPTCHA_DEV_PASSCODE\""
EnvKeyCaptchaProvider = "CAPTCHA_PROVIDER" // captcha提供者
EnvKeyCaptchaSecreteKey = "CAPTCHA_SECRET_KEY" // captcha站点密钥
EnvKeyCaptchaUrl = "CAPTCHA_URL" // 某些自托管的captcha的url
@ -64,7 +65,8 @@ const (
OidcUri = "/user/oidc/login" // OIDC登录URI
OidcProviderTypeMisskey = "misskey" // OIDC提供者类型Misskey
OidcProviderTypeOauth2 = "oauth2" // OIDC提供者类型GitHub
DefaultBaseUrl = "http://localhost:3000" // 默认BaseUrl
DefaultCaptchaDevPasscode = "dev_passcode"
DefaultBaseUrl = "http://localhost:3000" // 默认BaseUrl
DefaultPasswordSalt = "default_salt_114514"
TargetTypePost = "post"
TargetTypeComment = "comment"

View File

@ -25,21 +25,17 @@ type EmailConfig struct {
SSL bool // 是否使用SSL
}
// SendTemplate 发送HTML模板从配置文件中读取邮箱配置支持上下文控制
func (e *emailUtils) SendTemplate(emailConfig *EmailConfig, target, subject, htmlTemplate string, data map[string]interface{}) error {
func (e *emailUtils) RenderTemplate(htmlTemplate string, data map[string]interface{}) (string, error) {
// 使用Go的模板系统处理HTML模板
tmpl, err := template.New("email").Parse(htmlTemplate)
if err != nil {
return fmt.Errorf("解析模板失败: %w", err)
return "", fmt.Errorf("解析模板失败: %w", err)
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, data); err != nil {
return fmt.Errorf("执行模板失败: %w", err)
return "", fmt.Errorf("执行模板失败: %w", err)
}
// 发送处理后的HTML内容
return e.SendEmail(emailConfig, target, subject, buf.String(), true)
return buf.String(), nil
}
// SendEmail 使用gomail库发送邮件

View File

@ -1 +1,16 @@
package utils
import "testing"
func TestEmailUtils_SendEmail(t *testing.T) {
templateString := "{{.A}} {{.B}} {{.C}}"
data := map[string]interface{}{"A": 1, "B": 2, "C": 3}
rendered, err := Email.RenderTemplate(templateString, data)
if err != nil {
t.Fatalf("RenderTemplate failed: %v", err)
}
expected := "1 2 3"
if rendered != expected {
t.Errorf("RenderTemplate = %q; want %q", rendered, expected)
}
}