import wxApp from "./wecaht.min.app.js"; import request from "./request.js" let token = null; let requestLoginTime = 0; // 获取token export const getToken = async () => { if (getToken.promise) return getToken.promise; if(!token) token = uni.getStorageSync('token'); // token格式化 if (token && typeof token === "string") token = JSON.parse(token); console.log("checkToken", checkToken(token)); if (!token) getToken.promise = login(); else if (checkToken(token)) return Promise.resolve(token.token); else { getToken.promise = login(); } getToken.promise = getToken.promise .finally(() => { getToken.promise = null; }) .then(r => { console.log("refresh"); return setToken(r); }); return getToken.promise; }; // 登录 export const login = async () => { requestLoginTime++; if (requestLoginTime != 1) { let loginResponed = await loginPromise(); } let code = await (wxApp.getWxMinAppUuerCode()); let res = request.post("/api/auth/login",{code:code,appid:wxApp.getWXAppId()}); requestLoginTime = 0; return res; // return }; const loginPromise = () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(true) }, 800) }) } // 检测数据结果 export const checkResult = r => { if (!r.data.code) { return r.data.data; } else { return Promise.reject(r); } }; // 刷新token const refreshToken = () => { // let res = request.post("/api/auth/refreshToken",{refreshToken:code,appid:wxApp.getWXAppId()}); console.log('11111111111sssssssssssssssss',token); // return fly // .get("/refreshToken", { // token: token.token // }, { // headers: { // Authorization: token.token // } // }) // .then(r => { // return r; // }) // .catch(e => { // console.log(e); // console.error("刷新token失败"); // return Promise.reject(e); // }); }; // 检查token的有效期 const checkToken = t => { return new Date().getTime() < t.time; }; // 设置token const setToken = async t => { token = formatToken(t); uni.setStorageSync("token",token); return t.token; }; // 清除token export const clearToken = async () => { token = null; uni.removeStorageSync('token'); console.log("clear token done"); }; // 处理token的格式 const formatToken = t => { t.token = "Bearer " + t.accessToken; t.time = ((t.expiration -600)* 1000); return t; };