diff --git a/shared/index.tsx b/shared/index.tsx index ead20e11..3ce4f481 100644 --- a/shared/index.tsx +++ b/shared/index.tsx @@ -71,7 +71,11 @@ export { buildRegFn } from './manager/buildRegFn'; export { buildRegList } from './manager/buildRegList'; export { buildRegMap } from './manager/buildRegMap'; export { getServiceUrl, setServiceUrl } from './manager/service'; -export { setTokenGetter, refreshTokenGetter } from './manager/request'; +export { + setTokenGetter, + refreshTokenGetter, + setErrorHook, +} from './manager/request'; export { regSocketEventListener } from './manager/socket'; export { getStorage, setStorage, useStorage } from './manager/storage'; export { diff --git a/web/src/init.tsx b/web/src/init.tsx index b31d0665..33b6bd99 100644 --- a/web/src/init.tsx +++ b/web/src/init.tsx @@ -14,10 +14,13 @@ import { request, isValidStr, isDevelopment, + setErrorHook, + showToasts, } from 'tailchat-shared'; import { getPopupContainer } from './utils/dom-helper'; import { getUserJWT } from './utils/jwt-helper'; import _get from 'lodash/get'; +import _debounce from 'lodash/debounce'; if (isDevelopment) { import('source-ref-open-vscode'); @@ -62,6 +65,33 @@ setGlobalLoading((text) => { return hide; }); +const backToLoginPage = (() => { + let timer: number; + + return () => { + if (timer) { + return; + } + + console.warn('账号授权已过期, 2秒后自动跳转到登录页'); + showToasts(t('账号授权已过期, 2秒后自动跳转到登录页'), 'warning'); + + timer = window.setTimeout(() => { + window.clearTimeout(timer); + window.location.href = '/entry/login'; + }, 2000); + }; +})(); +setErrorHook((err) => { + if (_get(err, 'response.data.code') === 403) { + backToLoginPage(); + + return false; + } + + return true; +}); + /** * 获取前端配置 */