diff --git a/packages/global/common/system/types/index.d.ts b/packages/global/common/system/types/index.d.ts index 403d4380f..ac30d92e3 100644 --- a/packages/global/common/system/types/index.d.ts +++ b/packages/global/common/system/types/index.d.ts @@ -84,11 +84,6 @@ export type FastGPTFeConfigsType = { github?: string; google?: string; wechat?: string; - dingtalk?: string; - wecom?: { - corpid?: string; - agentid?: string; - }; microsoft?: { clientId?: string; tenantId?: string; diff --git a/packages/global/support/user/api.d.ts b/packages/global/support/user/api.d.ts index 86ce1f0df..2f8b4f5bd 100644 --- a/packages/global/support/user/api.d.ts +++ b/packages/global/support/user/api.d.ts @@ -12,8 +12,8 @@ export type PostLoginProps = { export type OauthLoginProps = { type: `${OAuthEnum}`; - code: string; callbackUrl: string; + props: Record; } & TrackRegisterParams; export type WxLoginProps = { diff --git a/packages/global/support/user/constant.ts b/packages/global/support/user/constant.ts index 8d8d24e27..0fae675cb 100644 --- a/packages/global/support/user/constant.ts +++ b/packages/global/support/user/constant.ts @@ -16,7 +16,5 @@ export enum OAuthEnum { google = 'google', wechat = 'wechat', microsoft = 'microsoft', - dingtalk = 'dingtalk', - wecom = 'wecom', sso = 'sso' } diff --git a/projects/app/src/pageComponents/account/team/OrgManage/index.tsx b/projects/app/src/pageComponents/account/team/OrgManage/index.tsx index ba2450734..e4e2c5cda 100644 --- a/projects/app/src/pageComponents/account/team/OrgManage/index.tsx +++ b/projects/app/src/pageComponents/account/team/OrgManage/index.tsx @@ -94,9 +94,11 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) { const currentOrgs = useMemo(() => { if (orgs.length === 0) return []; - // Auto select the first org(root org is team) if (parentPath === '') { - setParentPath(getOrgChildrenPath(orgs[0])); + const rootOrg = orgs.find((org) => org.path === ''); + if (rootOrg) { + setParentPath(getOrgChildrenPath(rootOrg)); + } return []; } diff --git a/projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx b/projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx index 0102f256c..286cd5cb1 100644 --- a/projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx +++ b/projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx @@ -13,6 +13,7 @@ import { checkIsWecomTerminal } from '@fastgpt/global/support/user/login/constan import { getNanoid } from '@fastgpt/global/common/string/tools'; import Avatar from '@fastgpt/web/components/common/Avatar'; import dynamic from 'next/dynamic'; +import { GET, POST } from '@/web/common/api/request'; interface Props { children: React.ReactNode; @@ -48,8 +49,7 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { { label: feConfigs.sso.title || 'Unknown', provider: OAuthEnum.sso, - icon: feConfigs.sso.icon, - redirectUrl: `${feConfigs.sso.url}/login/oauth/authorize?redirect_uri=${encodeURIComponent(redirectUri)}&state=${state.current}` + icon: feConfigs.sso.icon } ] : []), @@ -63,16 +63,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { } ] : []), - ...(feConfigs?.oauth?.dingtalk - ? [ - { - label: t('user:login.Dingtalk'), - provider: OAuthEnum.dingtalk, - icon: 'common/dingtalkFill', - redirectUrl: `https://login.dingtalk.com/oauth2/auth?client_id=${feConfigs?.oauth?.dingtalk}&redirect_uri=${redirectUri}&state=${state.current}&response_type=code&scope=openid&prompt=consent` - } - ] - : []), ...(feConfigs?.oauth?.google ? [ { @@ -104,18 +94,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { } ] : []), - ...(feConfigs?.oauth?.wecom - ? [ - { - label: t('login:wecom'), - provider: OAuthEnum.wecom, - icon: 'common/wecom', - redirectUrl: isWecomWorkTerminal - ? `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${feConfigs?.oauth?.wecom?.corpid}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_privateinfo&agentid=${feConfigs?.oauth?.wecom?.agentid}&state=${state.current}#wechat_redirect` - : `https://login.work.weixin.qq.com/wwlogin/sso/login?login_type=CorpApp&appid=${feConfigs?.oauth?.wecom?.corpid}&agentid=${feConfigs?.oauth?.wecom?.agentid}&redirect_uri=${redirectUri}&state=${state.current}` - } - ] - : []), ...(pageType !== LoginPageTypeEnum.passwordLogin ? [ { @@ -135,6 +113,19 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { const onClickOauth = useCallback( async (item: OAuthItem) => { + if (item.provider === OAuthEnum.sso) { + const redirectUrl = await POST('/proApi/support/user/account/login/getAuthURL', { + redirectUri, + isWecomWorkTerminal + }); + setLoginStore({ + provider: item.provider as OAuthEnum, + lastRoute, + state: state.current + }); + router.replace(redirectUrl, '_self'); + return; + } if (item.redirectUrl) { setLoginStore({ provider: item.provider as OAuthEnum, @@ -143,7 +134,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { }); router.replace(item.redirectUrl, '_self'); } - item.pageType && setPageType(item.pageType); }, [lastRoute, router, setLoginStore, setPageType] ); @@ -152,14 +142,8 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { useEffect(() => { if (rootLogin) return; const sso = oAuthList.find((item) => item.provider === OAuthEnum.sso); - const wecom = oAuthList.find((item) => item.provider === OAuthEnum.wecom); - if (feConfigs?.sso?.autoLogin && sso) { - // sso auto - onClickOauth(sso); - } else if (isWecomWorkTerminal && wecom) { - // Auto wecom login - onClickOauth(wecom); - } + // sso auto login + if (sso && (feConfigs?.sso?.autoLogin || isWecomWorkTerminal)) onClickOauth(sso); }, [rootLogin, feConfigs?.sso?.autoLogin, isWecomWorkTerminal, onClickOauth]); return ( diff --git a/projects/app/src/pages/login/provider.tsx b/projects/app/src/pages/login/provider.tsx index 21f217479..b6a109c1d 100644 --- a/projects/app/src/pages/login/provider.tsx +++ b/projects/app/src/pages/login/provider.tsx @@ -19,7 +19,7 @@ const provider = () => { const { initd, loginStore, setLoginStore } = useSystemStore(); const { setUserInfo } = useUserStore(); const router = useRouter(); - const { code, state, error } = router.query as { code: string; state: string; error?: string }; + const { state, error, ...props } = router.query as Record; const { toast } = useToast(); const loginSuccess = useCallback( @@ -31,12 +31,12 @@ const provider = () => { [setUserInfo, router, loginStore?.lastRoute] ); - const authCode = useCallback( - async (code: string) => { + const authProps = useCallback( + async (props: Record) => { try { const res = await oauthLogin({ type: loginStore?.provider || OAuthEnum.sso, - code, + props, callbackUrl: `${location.origin}/login/provider`, inviterId: localStorage.getItem('inviterId') || undefined, bd_vid: sessionStorage.getItem('bd_vid') || undefined, @@ -86,8 +86,8 @@ const provider = () => { return; } - console.log('SSO', { initd, loginStore, code, state }); - if (!code || !initd) return; + console.log('SSO', { initd, loginStore, props, state }); + if (!props || !initd) return; if (isOauthLogging) return; @@ -107,10 +107,10 @@ const provider = () => { }, 1000); return; } else { - authCode(code); + authProps(props); } })(); - }, [initd, authCode, code, error, loginStore, loginStore?.state, router, state, t, toast]); + }, [initd, authProps, error, loginStore, loginStore?.state, router, state, t, toast, props]); return ; }; diff --git a/projects/app/src/web/support/user/api.ts b/projects/app/src/web/support/user/api.ts index 4100f1db0..ed56cc0f5 100644 --- a/projects/app/src/web/support/user/api.ts +++ b/projects/app/src/web/support/user/api.ts @@ -96,7 +96,7 @@ export const getCaptchaPic = (username: string) => captchaImage: string; }>('/proApi/support/user/account/captcha/getImgCaptcha', { username }); -export const postSyncMembers = () => POST('/proApi/support/user/team/org/sync'); +export const postSyncMembers = () => POST('/proApi/support/user/sync'); export const GetSearchUserGroupOrg = ( searchKey: string,