From 19777df2ed24043d99af9c53d5b87b587a7cc00f Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Fri, 3 Apr 2026 07:17:27 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20bindEmailWithVerificationLogic=20?= =?UTF-8?q?=E9=82=AE=E7=AE=B1=E7=BB=91=E5=AE=9A=E5=90=8E=E8=B5=A0=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **问题**: 邮箱绑定后应该赠送 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 --- .../logic/public/user/bindEmailWithVerificationLogic.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/logic/public/user/bindEmailWithVerificationLogic.go b/internal/logic/public/user/bindEmailWithVerificationLogic.go index 6578124..2f69725 100644 --- a/internal/logic/public/user/bindEmailWithVerificationLogic.go +++ b/internal/logic/public/user/bindEmailWithVerificationLogic.go @@ -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),