token.js 2.3 KB

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