fix: bindEmailWithVerificationLogic 邮箱绑定后赠送逻辑错误

**问题**: 邮箱绑定后应该赠送 trial 的逻辑判断错误,导致以下场景无法赠送:
- EnableTrial=true, EnableTrialEmailWhitelist=false → 应该赠送但未赠送

**根本原因**: 第215行条件判断使用 OR 逻辑,要求白名单必须启用才处理
```go
if !rc.EnableTrial || !rc.EnableTrialEmailWhitelist {
    return  //  错误:关闭白名单时也返回,无法赠送
}
```

**修复**: 改为正确的逻辑
```go
if !rc.EnableTrial {
    return  // 关闭赠送时不处理
}
if rc.EnableTrialEmailWhitelist && !IsEmailDomainWhitelisted(...) {
    return  // 白名单启用但域名不匹配时不赠送
}
// 否则赠送
```

**影响场景**:
- 设备登录 → 绑定邮箱 → 应该赠送 trial
  - 当 EnableTrialEmailWhitelist=false 时,应该赠送(修复前未赠送)
  - 当 EnableTrialEmailWhitelist=true 且域名在白名单 → 赠送(修复前未赠送)

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
shanshanzhong 2026-04-03 07:17:27 -07:00
parent d586bbeabb
commit 19777df2ed

View File

@ -209,13 +209,13 @@ func (l *BindEmailWithVerificationLogic) refreshBindSessionToken(userId int64) (
}
// tryGrantTrialOnEmailBind grants trial subscription to the email user (family owner)
// if EnableTrialEmailWhitelist is on and the email domain matches.
// if EnableTrial is on and (if whitelist is enabled, email domain must match).
func (l *BindEmailWithVerificationLogic) tryGrantTrialOnEmailBind(ownerUserId int64, email string) {
rc := l.svcCtx.Config.Register
if !rc.EnableTrial || !rc.EnableTrialEmailWhitelist {
if !rc.EnableTrial {
return
}
if !auth.IsEmailDomainWhitelisted(email, rc.TrialEmailDomainWhitelist) {
if rc.EnableTrialEmailWhitelist && !auth.IsEmailDomainWhitelisted(email, rc.TrialEmailDomainWhitelist) {
l.Infow("email domain not in trial whitelist, skip",
logger.Field("email", email),
logger.Field("owner_user_id", ownerUserId),