token.js 2.2 KB

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