|
@@ -0,0 +1,91 @@
|
|
|
+import fly from "./fly";
|
|
|
+import qs from "qs";
|
|
|
+import storage from '@system.storage';
|
|
|
+import device from '@system.device';
|
|
|
+
|
|
|
+// 获取token
|
|
|
+let token = null;
|
|
|
+export const getToken = async () => {
|
|
|
+ if (getToken.promise) return getToken.promise
|
|
|
+
|
|
|
+ if (!token) token = (await storage.get({ key: "token" })).data;
|
|
|
+
|
|
|
+ // token格式化
|
|
|
+ if (token) token = JSON.parse(token);
|
|
|
+
|
|
|
+ if (!token) getToken.promise = login();
|
|
|
+ else if (checkToken(token)) return Promise.resolve(token.token);
|
|
|
+ else {
|
|
|
+ getToken.promise = refreshToken().catch(e => {
|
|
|
+ return login();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ getToken.promise = getToken.promise.finally(() => {
|
|
|
+ getToken.promise = null;
|
|
|
+ }).then(r => {
|
|
|
+ return setToken(r);
|
|
|
+ })
|
|
|
+
|
|
|
+ return getToken.promise;
|
|
|
+}
|
|
|
+
|
|
|
+// 登录
|
|
|
+export const login = async () => {
|
|
|
+ console.log("begin login");
|
|
|
+ let device_no = (await device.getUserId()).data.userId;
|
|
|
+ let device_info = (await device.getInfo()).data;
|
|
|
+ let data = qs.stringify({
|
|
|
+ device_no: device_no,
|
|
|
+ device_info: device_info
|
|
|
+ });
|
|
|
+ let ret = await fly.post("/login", data);
|
|
|
+ console.log("login over");
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+// 检测数据结果
|
|
|
+export const checkResult = (r) => {
|
|
|
+ if (!r.data.code) {
|
|
|
+ return r.data.data;
|
|
|
+ } else {
|
|
|
+ return Promise.reject(r)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 刷新token
|
|
|
+const refreshToken = () => {
|
|
|
+ return fly.get("/RefreshToken", {
|
|
|
+ token: token.token
|
|
|
+ }).then(r => {
|
|
|
+ return checkResult(r)
|
|
|
+ }).catch(e => {
|
|
|
+ console.error('刷新token失败')
|
|
|
+ return Promise.reject(e)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+// 检查token的有效期
|
|
|
+const checkToken = (t) => {
|
|
|
+ return new Date() < t.time
|
|
|
+}
|
|
|
+
|
|
|
+// 设置token
|
|
|
+const setToken = async (t) => {
|
|
|
+ token = formatToken(t);
|
|
|
+ await storage.set({ key: "token", value: token });
|
|
|
+ return t.token;
|
|
|
+}
|
|
|
+
|
|
|
+// 清除token
|
|
|
+export const clearToken = async () => {
|
|
|
+ token = null
|
|
|
+ await storage.delete({ key: 'token' })
|
|
|
+}
|
|
|
+
|
|
|
+// 处理token的格式
|
|
|
+const formatToken = (t) => {
|
|
|
+ t.token = 'Bearer ' + t.token
|
|
|
+ t.time = t.time * 1000 - 5 * 1000 * 60
|
|
|
+ return t
|
|
|
+}
|