65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
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<boolean> => {
|
|
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<boolean> => {
|
|
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;
|
|
};
|