import API from '@API/index'; import Env from '@Env/index'; import { postGlobalReduxReset } from '@Reducers/global/actions'; const EXPIRE_TIME_MS = 1000 * 60 * 60 * 24; // 確認一天前有沒有過期 /* General Action : For Local Token Storage */ export const removeLocalUserToken = (env: Env): void => { const localTokenName = env.TokenLocalStorageName; const localToken = localStorage.getItem(localTokenName); if (localToken) { localStorage.removeItem(localTokenName); } }; export const saveLocalUserToken = (env: Env, token: string): void => { const localTokenName = env.TokenLocalStorageName; const localToken = localStorage.getItem(localTokenName); if (localToken) { removeLocalUserToken(env); } localStorage.setItem(localTokenName, JSON.stringify({ token })); }; export const readLocalUserToken = async (env: Env, api: API): Promise => { const localTokenName = env.TokenLocalStorageName; const localToken = localStorage.getItem(localTokenName); if (localToken) { const localTokenJson = JSON.parse(localToken); api.updateAccessToken(localTokenJson.token); const isAccessExpired = await api.checkAccessTokenExpired(EXPIRE_TIME_MS); if (isAccessExpired) { removeLocalUserToken(env); return false; } return true; } return false; }; export const checkUserTokenIsValid = async (env: Env, api: API, dispatch: any): Promise => { const isAccessTokenValid = await api.checkAccessTokenValid(); // 確認 Token 是否合法 /* 合法 */ if (isAccessTokenValid) { const isAccessTokenExpired = await api.checkAccessTokenExpired(EXPIRE_TIME_MS); // 確認 Token 是否過期 /* 沒過期 */ if (!isAccessTokenExpired) { return true; } /* 過期 */ if (isAccessTokenExpired) { api.removeAccessToken(); dispatch(postGlobalReduxReset()); return false; } return true; } /* 不合法 */ if (!isAccessTokenValid) { const localTokenName = env.TokenLocalStorageName; localStorage.removeItem(localTokenName); api.removeAccessToken(); dispatch(postGlobalReduxReset()); return false; } return false; };