From ce2e926d763403c6eb87189c549afc1d35e4a328 Mon Sep 17 00:00:00 2001 From: heheer Date: Thu, 19 Dec 2024 13:33:56 +0800 Subject: [PATCH] fix: add sso auto login config (#3436) --- .../global/common/system/types/index.d.ts | 1 + .../LoginForm/components/FormLayout.tsx | 26 ++++++++++++++++--- projects/app/src/web/context/useInitApp.ts | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/global/common/system/types/index.d.ts b/packages/global/common/system/types/index.d.ts index 77c22ba09..0b0188f5e 100644 --- a/packages/global/common/system/types/index.d.ts +++ b/packages/global/common/system/types/index.d.ts @@ -58,6 +58,7 @@ export type FastGPTFeConfigsType = { icon?: string; title?: string; url?: string; + autoLogin?: boolean; }; oauth?: { github?: string; diff --git a/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx b/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx index 4532e582a..d180c9067 100644 --- a/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx +++ b/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx @@ -6,7 +6,7 @@ import { OAuthEnum } from '@fastgpt/global/support/user/constant'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { customAlphabet } from 'nanoid'; import { useRouter } from 'next/router'; -import { Dispatch, useMemo, useRef } from 'react'; +import { Dispatch, useEffect, useMemo, useRef } from 'react'; import { useTranslation } from 'next-i18next'; import I18nLngSelector from '@/components/Select/I18nLngSelector'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; @@ -100,6 +100,26 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { [feConfigs?.sso?.url, oAuthList.length] ); + const formatUrl = useMemo(() => { + if (feConfigs?.sso?.url) { + return `${feConfigs.sso.url}/login/oauth/authorize?redirect_uri=${encodeURIComponent(redirectUri)}&state=${state.current}`; + } + return ''; + }, [feConfigs.sso, redirectUri]); + + useEffect(() => { + if (formatUrl && feConfigs?.sso?.autoLogin) { + setLoginStore({ + provider: OAuthEnum.sso, + lastRoute, + state: state.current + }); + + window.open(formatUrl, '_self'); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [feConfigs.sso]); + return ( @@ -167,8 +187,7 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { borderRadius={'sm'} leftIcon={} onClick={() => { - const url = feConfigs.sso?.url; - if (!url) { + if (!formatUrl) { toast({ title: 'SSO URL is not set', status: 'error' @@ -181,7 +200,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => { state: state.current }); - const formatUrl = `${url}/login/oauth/authorize?redirect_uri=${encodeURIComponent(redirectUri)}&state=${state.current}`; window.open(formatUrl, '_self'); }} > diff --git a/projects/app/src/web/context/useInitApp.ts b/projects/app/src/web/context/useInitApp.ts index beb923572..d6b61436b 100644 --- a/projects/app/src/web/context/useInitApp.ts +++ b/projects/app/src/web/context/useInitApp.ts @@ -71,7 +71,7 @@ export const useInitApp = () => { if (sourceDomain) return sourceDomain; return document.referrer; })(); - console.log(formatSourceDomain, '-=-='); + if (formatSourceDomain && !sessionStorage.getItem('sourceDomain')) { sessionStorage.setItem('sourceDomain', formatSourceDomain); }