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