mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 13:03:50 +00:00
@@ -12,6 +12,8 @@ import { serviceSideProps } from '@/web/common/utils/i18n';
|
||||
import { getErrText } from '@fastgpt/global/common/error/utils';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
|
||||
let isOauthLogging = false;
|
||||
|
||||
const provider = () => {
|
||||
const { t } = useTranslation();
|
||||
const { loginStore } = useSystemStore();
|
||||
@@ -20,7 +22,6 @@ const provider = () => {
|
||||
const router = useRouter();
|
||||
const { code, state, error } = router.query as { code: string; state: string; error?: string };
|
||||
const { toast } = useToast();
|
||||
const loading = useRef(false);
|
||||
|
||||
const loginSuccess = useCallback(
|
||||
(res: ResLogin) => {
|
||||
@@ -31,21 +32,13 @@ const provider = () => {
|
||||
setLastChatId('');
|
||||
setLastChatAppId('');
|
||||
|
||||
setTimeout(() => {
|
||||
router.push(
|
||||
loginStore?.lastRoute ? decodeURIComponent(loginStore?.lastRoute) : '/app/list'
|
||||
);
|
||||
}, 100);
|
||||
router.push(loginStore?.lastRoute ? decodeURIComponent(loginStore?.lastRoute) : '/app/list');
|
||||
},
|
||||
[setLastChatId, setLastChatAppId, setUserInfo, router, loginStore?.lastRoute]
|
||||
);
|
||||
|
||||
const authCode = useCallback(
|
||||
async (code: string) => {
|
||||
if (loading.current) return;
|
||||
|
||||
loading.current = true;
|
||||
|
||||
if (!loginStore) {
|
||||
router.replace('/login');
|
||||
return;
|
||||
@@ -91,24 +84,30 @@ const provider = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!code || !loginStore || !state) return;
|
||||
if (!code || !loginStore?.state || !state) return;
|
||||
|
||||
clearToken();
|
||||
router.prefetch('/app/list');
|
||||
if (isOauthLogging) return;
|
||||
|
||||
if (state !== loginStore?.state) {
|
||||
toast({
|
||||
status: 'warning',
|
||||
title: t('common:support.user.login.security_failed')
|
||||
});
|
||||
setTimeout(() => {
|
||||
router.replace('/login');
|
||||
}, 1000);
|
||||
return;
|
||||
} else {
|
||||
authCode(code);
|
||||
}
|
||||
}, [authCode, code, error, loginStore, router, state, t, toast]);
|
||||
isOauthLogging = true;
|
||||
|
||||
(async () => {
|
||||
await clearToken();
|
||||
router.prefetch('/app/list');
|
||||
|
||||
if (state !== loginStore?.state) {
|
||||
toast({
|
||||
status: 'warning',
|
||||
title: t('common:support.user.login.security_failed')
|
||||
});
|
||||
setTimeout(() => {
|
||||
router.replace('/login');
|
||||
}, 1000);
|
||||
return;
|
||||
} else {
|
||||
authCode(code);
|
||||
}
|
||||
})();
|
||||
}, [authCode, code, error, loginStore, loginStore?.state, router, state, t, toast]);
|
||||
|
||||
return <Loading />;
|
||||
};
|
||||
|
@@ -11,13 +11,14 @@ import { serviceSideProps } from '@/web/common/utils/i18n';
|
||||
import { useToast } from '@fastgpt/web/hooks/useToast';
|
||||
import { getErrText } from '@fastgpt/global/common/error/utils';
|
||||
|
||||
let isOauthLogging = false;
|
||||
|
||||
const provider = () => {
|
||||
const { t } = useTranslation();
|
||||
const { setLastChatId, setLastChatAppId } = useChatStore();
|
||||
const { setUserInfo } = useUserStore();
|
||||
const router = useRouter();
|
||||
const { query } = router;
|
||||
const loading = useRef(false);
|
||||
const { toast } = useToast();
|
||||
|
||||
const loginSuccess = useCallback(
|
||||
@@ -34,8 +35,8 @@ const provider = () => {
|
||||
);
|
||||
|
||||
const handleSSO = useCallback(async () => {
|
||||
if (loading.current) return;
|
||||
loading.current = true;
|
||||
if (isOauthLogging) return;
|
||||
isOauthLogging = true;
|
||||
|
||||
try {
|
||||
const res = await ssoLogin(query);
|
||||
@@ -64,8 +65,14 @@ const provider = () => {
|
||||
|
||||
useEffect(() => {
|
||||
if (query && Object.keys(query).length > 0) {
|
||||
clearToken();
|
||||
handleSSO();
|
||||
if (isOauthLogging) return;
|
||||
|
||||
isOauthLogging = true;
|
||||
|
||||
(async () => {
|
||||
await clearToken();
|
||||
handleSSO();
|
||||
})();
|
||||
}
|
||||
}, [handleSSO, query]);
|
||||
|
||||
|
@@ -3,8 +3,8 @@ import { loginOut } from '@/web/support/user/api';
|
||||
const tokenKey = 'token';
|
||||
export const clearToken = () => {
|
||||
try {
|
||||
loginOut();
|
||||
localStorage.removeItem(tokenKey);
|
||||
return loginOut();
|
||||
} catch (error) {
|
||||
error;
|
||||
}
|
||||
|
Reference in New Issue
Block a user