diff --git a/app/HomeClient.tsx b/app/HomeClient.tsx index 41fb02e..b621cb3 100644 --- a/app/HomeClient.tsx +++ b/app/HomeClient.tsx @@ -274,11 +274,52 @@ export default function HomeClient() { : typeof relations?.anonymous_user_id === "string" ? relations.anonymous_user_id.trim() : ""; + const linkedPbUserId = + typeof relations?.linked_pb_user_id === "string" + ? relations.linked_pb_user_id.trim() + : typeof relations?.pb_user_id === "string" + ? relations.pb_user_id.trim() + : ""; + const relationUserId = + typeof relations?.user_id === "string" ? relations.user_id.trim() : ""; + const linkedEmail = + typeof relations?.linked_email === "string" + ? relations.linked_email.trim().toLowerCase() + : typeof relations?.email === "string" + ? relations.email.trim().toLowerCase() + : ""; + const hasVipFromRelation = + relations?.has_vip_by_user_id === true || + relations?.has_vip_by_pb_user === true; if (/^user\d+$/.test(linkedAnonymousUserId)) { setStorage("userId", linkedAnonymousUserId); setStorage("memosAccount", linkedAnonymousUserId); setAnonymousUserCookie(linkedAnonymousUserId); } + // 关键修复:若 wechat_profile 已确认关联到 VIP 用户,立即回填关联 user_id 并进入 VIP 态 + if (hasVipFromRelation) { + const resolvedVipUserId = + linkedPbUserId || relationUserId || linkedAnonymousUserId; + if (resolvedVipUserId) { + setStorage("userId", resolvedVipUserId); + if (/^user\d+$/.test(resolvedVipUserId)) { + setStorage("memosAccount", resolvedVipUserId); + setAnonymousUserCookie(resolvedVipUserId); + } + savePaidType("vip"); + if (linkedEmail) { + setStorage("userEmail", linkedEmail); + setStorage("userName", linkedEmail); + setStorage("emailLinked", "1"); + setUserEmail(linkedEmail); + saveUserName(linkedEmail); + } else if (nickname) { + saveUserName(nickname); + } else { + saveUserName(resolvedVipUserId); + } + } + } if (nickname) { setWechatNick(nickname); setStorage("wechatNick", nickname); @@ -296,7 +337,7 @@ export default function HomeClient() { } catch { // 忽略失败,不影响主流程 } - }, []); + }, [savePaidType, saveUserName]); const getStoredAnonymousUserId = useCallback((): string | null => { const memosAccount = getStorage("memosAccount");