Files
kiss-translator/src/libs/auth.js

45 lines
1.0 KiB
JavaScript
Raw Normal View History

2023-07-20 13:45:41 +08:00
import storage from "./storage";
import { STOKEY_MSAUTH, 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缓存
const res = (await storage.getObj(STOKEY_MSAUTH)) || {};
token = res.token;
exp = res.exp;
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);
await storage.setObj(STOKEY_MSAUTH, { token, exp });
return [token, exp];
};
};
export const msAuth = _msAuth();