From 4e2ab1f63b0a91be18eb6875b60b8699ea43d893 Mon Sep 17 00:00:00 2001 From: Zhuangzai fa <143257420+ctrlz526@users.noreply.github.com> Date: Tue, 15 Jul 2025 17:29:36 +0800 Subject: [PATCH] Enhance WeChat login functionality (#5213) * Enhance WeChat login functionality * Add inviterId --- packages/global/support/user/api.d.ts | 4 +++ .../login/LoginForm/WechatForm.tsx | 35 +++++++++++++++---- projects/app/src/pages/login/index.tsx | 7 +--- projects/app/src/web/support/user/api.ts | 5 +-- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/packages/global/support/user/api.d.ts b/packages/global/support/user/api.d.ts index 3b3da316b..858df4f17 100644 --- a/packages/global/support/user/api.d.ts +++ b/packages/global/support/user/api.d.ts @@ -21,6 +21,10 @@ export type OauthLoginProps = { export type WxLoginProps = { inviterId?: string; code: string; + bd_vid?: string; + msclkid?: string; + fastgpt_sem?: string; + sourceDomain?: string; }; export type FastLoginProps = { diff --git a/projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx b/projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx index a545acb8e..2f686ee4a 100644 --- a/projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx +++ b/projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx @@ -10,6 +10,14 @@ import FormLayout from './FormLayout'; import { useTranslation } from 'next-i18next'; import Loading from '@fastgpt/web/components/common/MyLoading'; import MyImage from '@fastgpt/web/components/common/Image/MyImage'; +import { + getBdVId, + getFastGPTSem, + getMsclkid, + getSourceDomain, + removeFastGPTSem, + getInviterId +} from '@/web/support/marketing/utils'; interface Props { loginSuccess: (e: ResLogin) => void; @@ -29,15 +37,28 @@ const WechatForm = ({ setPageType, loginSuccess }: Props) => { } }); - useQuery(['getWXLoginResult', wechatInfo?.code], () => getWXLoginResult(wechatInfo?.code || ''), { - refetchInterval: 3 * 1000, - enabled: !!wechatInfo?.code, - onSuccess(data: ResLogin | undefined) { - if (data) { - loginSuccess(data); + useQuery( + ['getWXLoginResult', wechatInfo?.code], + () => + getWXLoginResult({ + inviterId: getInviterId(), + code: wechatInfo?.code || '', + bd_vid: getBdVId(), + msclkid: getMsclkid(), + fastgpt_sem: getFastGPTSem(), + sourceDomain: getSourceDomain() + }), + { + refetchInterval: 3 * 1000, + enabled: !!wechatInfo?.code, + onSuccess(data: ResLogin | undefined) { + if (data) { + removeFastGPTSem(); + loginSuccess(data); + } } } - }); + ); return ( diff --git a/projects/app/src/pages/login/index.tsx b/projects/app/src/pages/login/index.tsx index ce5a16bc8..a72c8c6f1 100644 --- a/projects/app/src/pages/login/index.tsx +++ b/projects/app/src/pages/login/index.tsx @@ -90,15 +90,10 @@ const Login = ({ ChineseRedirectUrl }: { ChineseRedirectUrl: string }) => { /* default login type */ useEffect(() => { - const bd_vid = getBdVId(); - if (bd_vid) { - setPageType(LoginPageTypeEnum.passwordLogin); - return; - } + //delete bd_vid and show WeChat login setPageType( feConfigs?.oauth?.wechat ? LoginPageTypeEnum.wechat : LoginPageTypeEnum.passwordLogin ); - // init store setLastChatAppId(''); }, [feConfigs?.oauth, setLastChatAppId]); diff --git a/projects/app/src/web/support/user/api.ts b/projects/app/src/web/support/user/api.ts index bc0e4a4ee..1411efb6c 100644 --- a/projects/app/src/web/support/user/api.ts +++ b/projects/app/src/web/support/user/api.ts @@ -15,6 +15,7 @@ import type { GetWXLoginQRResponse } from '@fastgpt/global/support/user/login/api.d'; import type { preLoginResponse } from '@/pages/api/support/user/account/preLogin'; +import type { WxLoginProps } from '@fastgpt/global/support/user/api.d'; export const sendAuthCode = (data: { username: string; @@ -99,8 +100,8 @@ export const putUserInfo = (data: UserUpdateParams) => PUT('/support/user/accoun export const getWXLoginQR = () => GET('/proApi/support/user/account/login/wx/getQR'); -export const getWXLoginResult = (code: string) => - GET(`/proApi/support/user/account/login/wx/getResult`, { code }); +export const getWXLoginResult = (params: WxLoginProps) => + GET(`/proApi/support/user/account/login/wx/getResult`, params); export const getCaptchaPic = (username: string) => GET<{