2023-08-31 00:18:57 +08:00
|
|
|
|
import { getMsauth, setMsauth } from "./storage";
|
|
|
|
|
|
import { URL_MICROSOFT_AUTH } from "../config";
|
2023-08-10 11:55:40 +08:00
|
|
|
|
import { fetchData } from "./fetch";
|
2023-07-20 13:45:41 +08:00
|
|
|
|
|
2023-08-05 15:32:51 +08:00
|
|
|
|
const parseMSToken = (token) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
return JSON.parse(atob(token.split(".")[1])).exp;
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
console.log("[parseMSToken]", err);
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
};
|
2023-07-20 13:45:41 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 闭包缓存token,减少对storage查询
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
const _msAuth = () => {
|
|
|
|
|
|
let { token, exp } = {};
|
|
|
|
|
|
|
|
|
|
|
|
return async () => {
|
|
|
|
|
|
// 查询内存缓存
|
|
|
|
|
|
const now = Date.now();
|
|
|
|
|
|
if (token && exp * 1000 > now + 1000) {
|
|
|
|
|
|
return [token, exp];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 查询storage缓存
|
2023-08-31 00:18:57 +08:00
|
|
|
|
const res = await getMsauth();
|
|
|
|
|
|
token = res?.token;
|
|
|
|
|
|
exp = res?.exp;
|
2023-07-20 13:45:41 +08:00
|
|
|
|
if (token && exp * 1000 > now + 1000) {
|
|
|
|
|
|
return [token, exp];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 缓存没有或失效,查询接口
|
2023-08-10 11:55:40 +08:00
|
|
|
|
token = await fetchData(URL_MICROSOFT_AUTH);
|
2023-07-20 13:45:41 +08:00
|
|
|
|
exp = parseMSToken(token);
|
2023-08-31 00:18:57 +08:00
|
|
|
|
await setMsauth({ token, exp });
|
2023-07-20 13:45:41 +08:00
|
|
|
|
return [token, exp];
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export const msAuth = _msAuth();
|