utils.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import wxApp from "./wecaht.min.app.js";
  2. import request from "./request.js"
  3. let token = null;
  4. let requestLoginTime = 0;
  5. // 获取token
  6. export const getToken = async () => {
  7. if (getToken.promise) return getToken.promise;
  8. if(!token) token = uni.getStorageSync('token');
  9. // token格式化
  10. if (token && typeof token === "string") token = JSON.parse(token);
  11. console.log("checkToken", checkToken(token));
  12. if (!token) getToken.promise = login();
  13. else if (checkToken(token)) return Promise.resolve(token.token);
  14. else {
  15. getToken.promise = login();
  16. }
  17. getToken.promise = getToken.promise
  18. .finally(() => {
  19. getToken.promise = null;
  20. })
  21. .then(r => {
  22. console.log("refresh");
  23. return setToken(r);
  24. });
  25. return getToken.promise;
  26. };
  27. // 登录
  28. export const login = async () => {
  29. requestLoginTime++;
  30. if (requestLoginTime != 1) {
  31. let loginResponed = await loginPromise();
  32. }
  33. let code = await (wxApp.getWxMinAppUuerCode());
  34. let res = request.post("/api/auth/login",{code:code,appid:wxApp.getWXAppId()});
  35. requestLoginTime = 0;
  36. return res;
  37. // return
  38. };
  39. const loginPromise = () => {
  40. return new Promise((resolve, reject) => {
  41. setTimeout(() => {
  42. resolve(true)
  43. }, 800)
  44. })
  45. }
  46. // 检测数据结果
  47. export const checkResult = r => {
  48. if (!r.data.code) {
  49. return r.data.data;
  50. } else {
  51. return Promise.reject(r);
  52. }
  53. };
  54. // 刷新token
  55. const refreshToken = () => {
  56. // let res = request.post("/api/auth/refreshToken",{refreshToken:code,appid:wxApp.getWXAppId()});
  57. console.log('11111111111sssssssssssssssss',token);
  58. // return fly
  59. // .get("/refreshToken", {
  60. // token: token.token
  61. // }, {
  62. // headers: {
  63. // Authorization: token.token
  64. // }
  65. // })
  66. // .then(r => {
  67. // return r;
  68. // })
  69. // .catch(e => {
  70. // console.log(e);
  71. // console.error("刷新token失败");
  72. // return Promise.reject(e);
  73. // });
  74. };
  75. // 检查token的有效期
  76. const checkToken = t => {
  77. return new Date().getTime() < t.time;
  78. };
  79. // 设置token
  80. const setToken = async t => {
  81. token = formatToken(t);
  82. uni.setStorageSync("token",token);
  83. return t.token;
  84. };
  85. // 清除token
  86. export const clearToken = async () => {
  87. token = null;
  88. uni.removeStorageSync('token');
  89. console.log("clear token done");
  90. };
  91. // 处理token的格式
  92. const formatToken = t => {
  93. t.token = "Bearer " + t.accessToken;
  94. t.time = ((t.expiration -600)* 1000);
  95. return t;
  96. };