@smart100/spu-web-plugin 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- var version = "1.0.3";
1
+ var version = "1.0.5";
2
2
 
3
3
  /** Detect free variable `global` from Node.js. */
4
4
  var freeGlobal$2 = typeof global == 'object' && global && global.Object === Object && global;
@@ -8318,7 +8318,7 @@ var createAxiosInstance$1 = function createAxiosInstance() {
8318
8318
 
8319
8319
  axiosInstance.interceptors.request.use( /*#__PURE__*/function () {
8320
8320
  var _ref = _asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee(config) {
8321
- var isShowLoading, isSendToken, token, moduleData;
8321
+ var isShowLoading, isSendToken, loginState, token, moduleData;
8322
8322
  return _regeneratorRuntime$1().wrap(function _callee$(_context) {
8323
8323
  while (1) switch (_context.prev = _context.next) {
8324
8324
  case 0:
@@ -8332,11 +8332,9 @@ var createAxiosInstance$1 = function createAxiosInstance() {
8332
8332
  _context.next = 16;
8333
8333
  break;
8334
8334
  }
8335
- if (!(config.url !== '/api/auth/refreshtoken')) {
8336
- _context.next = 14;
8337
- break;
8338
- }
8339
- if (!(!checkLogin() && getRole() !== 'center')) {
8335
+ // 请求接口前校验是否过期 如果过期先刷新token
8336
+ loginState = getLoginState();
8337
+ if (!(config.url !== '/api/auth/refreshtoken' && !loginState.islogin && loginState.type === 2 && loginState.role !== 'center')) {
8340
8338
  _context.next = 14;
8341
8339
  break;
8342
8340
  }
@@ -8632,8 +8630,12 @@ function removeRefreshToken() {
8632
8630
  removeData('refreshtoken');
8633
8631
  }
8634
8632
  function updateToken() {
8635
- // 如果是产品运营中心 则不走刷新token流程
8636
- if (checkLogin() && getRole() === 'center') {
8633
+ var loginState = getLoginState();
8634
+ if (!loginState.islogin && loginState.type <= 1) {
8635
+ console.warn('当前未登录/token过期,不支持自动刷新token。');
8636
+ return false;
8637
+ }
8638
+ if (loginState.role === 'center') {
8637
8639
  console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
8638
8640
  return false;
8639
8641
  }
@@ -8644,11 +8646,12 @@ function updateToken() {
8644
8646
  params: {
8645
8647
  refreshtoken: sendToken
8646
8648
  },
8647
- isShowLoadding: false,
8649
+ isShowLoading: false,
8648
8650
  isShowErrorMessage: false,
8649
8651
  isSendToken: false,
8650
8652
  headers: {
8651
- token: sendToken
8653
+ token: sendToken,
8654
+ tecode: getUser('tenantcode')
8652
8655
  }
8653
8656
  }).then(function (res) {
8654
8657
  // console.log(res)
@@ -8662,17 +8665,20 @@ function updateToken() {
8662
8665
  }
8663
8666
  var refreshtokenTimer = null;
8664
8667
  function startRefreshtoken() {
8668
+ var loginState = getLoginState();
8665
8669
  // 如果是产品运营中心 则不走刷新token流程
8666
- if (checkLogin() && getRole() === 'center') {
8670
+ if (loginState.role === 'center') {
8667
8671
  console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
8668
8672
  return false;
8669
8673
  }
8670
- stopRefreshtoken();
8674
+ // stopRefreshtoken()
8675
+ clearTimeout(refreshtokenTimer);
8676
+ refreshtokenTimer = null;
8671
8677
  // 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
8672
8678
  // 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
8673
- // 如果没登录 每隔1分钟走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
8679
+ // 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
8674
8680
  var time = 0;
8675
- if (checkLogin()) {
8681
+ if (loginState.islogin) {
8676
8682
  var user = getUserByToken(getRefreshToken());
8677
8683
  if (user !== null && user !== void 0 && user.tokenId) {
8678
8684
  time = Number(getTokenExpires()) - Date.now() - 1000 * 15;
@@ -8686,14 +8692,18 @@ function startRefreshtoken() {
8686
8692
  time = 10000;
8687
8693
  }
8688
8694
  } else {
8689
- time = 60000;
8695
+ if (loginState.type === 2) {
8696
+ time = 0;
8697
+ } else {
8698
+ time = 10000;
8699
+ }
8690
8700
  }
8691
8701
  // time = 5000
8692
8702
  refreshtokenTimer = window.setTimeout( /*#__PURE__*/_asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
8693
8703
  return _regeneratorRuntime$1().wrap(function _callee$(_context) {
8694
8704
  while (1) switch (_context.prev = _context.next) {
8695
8705
  case 0:
8696
- if (!checkLogin()) {
8706
+ if (!(getLoginState().type >= 2)) {
8697
8707
  _context.next = 3;
8698
8708
  break;
8699
8709
  }
@@ -8708,10 +8718,6 @@ function startRefreshtoken() {
8708
8718
  }, _callee);
8709
8719
  })), time);
8710
8720
  }
8711
- function stopRefreshtoken() {
8712
- clearTimeout(refreshtokenTimer);
8713
- refreshtokenTimer = null;
8714
- }
8715
8721
  function getUser(key) {
8716
8722
  var user = getData('user');
8717
8723
  var userObj = user ? JSON.parse(user) : null;
@@ -8845,40 +8851,64 @@ function getRoleByToken(token) {
8845
8851
  }
8846
8852
  return loginRole;
8847
8853
  }
8848
- function getRole() {
8849
- return getRoleByToken(getToken());
8854
+ // 检测token是否过期
8855
+ function checkLoginByToken(token) {
8856
+ var haslogged = false;
8857
+ if (token) {
8858
+ var jwtInfo = parseToken(token);
8859
+ if (jwtInfo !== null && jwtInfo !== void 0 && jwtInfo.exp) {
8860
+ haslogged = Number(jwtInfo.exp + '000') > Date.now();
8861
+ } else {
8862
+ haslogged = false;
8863
+ }
8864
+ }
8865
+ return haslogged;
8850
8866
  }
8851
8867
  // 检测当前用户是否登录状态
8852
8868
  function checkLogin() {
8853
- var haslogged = false;
8869
+ return checkLoginByToken(getToken());
8870
+ // return getLoginState().islogin
8871
+ }
8872
+
8873
+ function getLoginState() {
8874
+ var role = 'tenant'; // center | tenant
8875
+ var islogin = false;
8876
+ // 0: 未登录 缓存中没有token refreshtoken tokenexpires
8877
+ // 1: 有登录过 缓存中有token refreshtoken tokenexpires token 过期 refreshtoken 过期
8878
+ // 2: 有登录过 缓存中有token refreshtoken tokenexpires token 过期 refreshtoken 未过期
8879
+ // 10: 有登录过 缓存中有token refreshtoken tokenexpires token 未过期 refreshtoken 未过期
8880
+ var type = 0;
8854
8881
  var token = getToken();
8855
8882
  if (token) {
8856
- if (getRole() === 'center') {
8857
- haslogged = checkLoginByToken(token);
8883
+ role = getRoleByToken(token);
8884
+ if (role === 'center') {
8885
+ // 产品运营中心的token是永久的不会过期 且 没有 refreshtoken 和 tokenexpires
8886
+ islogin = checkLoginByToken(token);
8887
+ type = 10;
8858
8888
  } else {
8859
8889
  var refreshtoken = getRefreshToken();
8860
8890
  var tokenexpires = getTokenExpires();
8861
8891
  var now = Date.now();
8862
- if (token && refreshtoken && tokenexpires && Number(tokenexpires) > now) {
8863
- haslogged = checkLoginByToken(token);
8892
+ if (refreshtoken && tokenexpires) {
8893
+ if (Number(tokenexpires) > now && checkLoginByToken(token)) {
8894
+ islogin = true;
8895
+ type = 10;
8896
+ } else {
8897
+ islogin = false;
8898
+ if (checkLoginByToken(refreshtoken)) {
8899
+ type = 2;
8900
+ } else {
8901
+ type = 1;
8902
+ }
8903
+ }
8864
8904
  }
8865
8905
  }
8866
8906
  }
8867
- return haslogged;
8868
- }
8869
- // 检测token是否过期
8870
- function checkLoginByToken(token) {
8871
- var haslogged = false;
8872
- if (token) {
8873
- var now = Date.now();
8874
- var jwtInfo = parseToken(token);
8875
- if (jwtInfo !== null && jwtInfo !== void 0 && jwtInfo.exp) {
8876
- haslogged = Number(jwtInfo.exp + '000') > now;
8877
- } else {
8878
- haslogged = false;
8879
- }
8880
- }
8881
- return haslogged;
8907
+ return {
8908
+ role: role,
8909
+ islogin: islogin,
8910
+ type: type
8911
+ };
8882
8912
  }
8883
8913
  // 接口请求回来的 userInfo 有 functioncodes 以便做权限校验
8884
8914
  // 有可能是中心角色请求失败 兼容不报错
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart100/spu-web-plugin",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "dev": "npm run build:types && rollup -c -w",
package/src/axios.ts CHANGED
@@ -2,7 +2,7 @@ import axios from 'axios'
2
2
  import type { AxiosInstance, AxiosResponse } from 'axios'
3
3
  import { get } from 'lodash-es'
4
4
  import { loadding } from './components/loadding'
5
- import { getToken, checkLogin, getRole, updateToken } from './login'
5
+ import { getToken, updateToken, getLoginState } from './login'
6
6
  import core from './core'
7
7
  import { urlquery } from './urlquery'
8
8
 
@@ -37,13 +37,17 @@ const createAxiosInstance = (type: 'spu' | 'normal' = 'spu', options: any) => {
37
37
  const isSendToken = get(config, 'isSendToken', true)
38
38
  if (isSendToken) {
39
39
  // 请求接口前校验是否过期 如果过期先刷新token
40
- if (config.url !== '/api/auth/refreshtoken') {
41
- if (!checkLogin() && getRole() !== 'center') {
42
- try {
43
- await updateToken()
44
- } catch (err) {
45
- console.error(err)
46
- }
40
+ const loginState = getLoginState()
41
+ if (
42
+ config.url !== '/api/auth/refreshtoken' &&
43
+ !loginState.islogin &&
44
+ loginState.type === 2 &&
45
+ loginState.role !== 'center'
46
+ ) {
47
+ try {
48
+ await updateToken()
49
+ } catch (err) {
50
+ console.error(err)
47
51
  }
48
52
  }
49
53
 
package/src/login.ts CHANGED
@@ -113,11 +113,18 @@ function removeRefreshToken() {
113
113
  }
114
114
 
115
115
  function updateToken() {
116
- // 如果是产品运营中心 则不走刷新token流程
117
- if (checkLogin() && getRole() === 'center') {
116
+ const loginState = getLoginState()
117
+
118
+ if (!loginState.islogin && loginState.type <= 1) {
119
+ console.warn('当前未登录/token过期,不支持自动刷新token。')
120
+ return false
121
+ }
122
+
123
+ if (loginState.role === 'center') {
118
124
  console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
119
125
  return false
120
126
  }
127
+
121
128
  const token = getToken()
122
129
  const refreshtoken = getRefreshToken()
123
130
  const sendToken = checkLoginByToken(token) ? token : refreshtoken
@@ -126,11 +133,12 @@ function updateToken() {
126
133
  params: {
127
134
  refreshtoken: sendToken
128
135
  },
129
- isShowLoadding: false,
136
+ isShowLoading: false,
130
137
  isShowErrorMessage: false,
131
138
  isSendToken: false,
132
139
  headers: {
133
- token: sendToken
140
+ token: sendToken,
141
+ tecode: getUser('tenantcode')
134
142
  }
135
143
  })
136
144
  .then((res: any) => {
@@ -147,19 +155,22 @@ function updateToken() {
147
155
  let refreshtokenTimer: number | null = null
148
156
 
149
157
  function startRefreshtoken() {
158
+ const loginState = getLoginState()
150
159
  // 如果是产品运营中心 则不走刷新token流程
151
- if (checkLogin() && getRole() === 'center') {
160
+ if (loginState.role === 'center') {
152
161
  console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
153
162
  return false
154
163
  }
155
164
 
156
- stopRefreshtoken()
165
+ // stopRefreshtoken()
166
+ clearTimeout(refreshtokenTimer as number)
167
+ refreshtokenTimer = null
157
168
 
158
169
  // 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
159
170
  // 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
160
- // 如果没登录 每隔1分钟走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
171
+ // 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
161
172
  let time = 0
162
- if (checkLogin()) {
173
+ if (loginState.islogin) {
163
174
  const user = getUserByToken(getRefreshToken())
164
175
  if (user?.tokenId) {
165
176
  time = Number(getTokenExpires()) - Date.now() - 1000 * 15
@@ -173,22 +184,21 @@ function startRefreshtoken() {
173
184
  time = 10000
174
185
  }
175
186
  } else {
176
- time = 60000
187
+ if (loginState.type === 2) {
188
+ time = 0
189
+ } else {
190
+ time = 10000
191
+ }
177
192
  }
178
193
  // time = 5000
179
194
  refreshtokenTimer = window.setTimeout(async () => {
180
- if (checkLogin()) {
195
+ if (getLoginState().type >= 2) {
181
196
  await updateToken()
182
197
  }
183
198
  startRefreshtoken()
184
199
  }, time)
185
200
  }
186
201
 
187
- function stopRefreshtoken() {
188
- clearTimeout(refreshtokenTimer as number)
189
- refreshtokenTimer = null
190
- }
191
-
192
202
  function getUser(key?: string): any {
193
203
  const user = getData('user')
194
204
  const userObj = user ? JSON.parse(user) : null
@@ -335,38 +345,69 @@ function getRole() {
335
345
  return getRoleByToken(getToken())
336
346
  }
337
347
 
348
+ // 检测token是否过期
349
+ function checkLoginByToken(token?: string) {
350
+ let haslogged = false
351
+ if (token) {
352
+ const jwtInfo = parseToken(token)
353
+ if (jwtInfo?.exp) {
354
+ haslogged = Number(jwtInfo.exp + '000') > Date.now()
355
+ } else {
356
+ haslogged = false
357
+ }
358
+ }
359
+ return haslogged
360
+ }
361
+
338
362
  // 检测当前用户是否登录状态
339
363
  function checkLogin() {
340
- let haslogged = false
364
+ return checkLoginByToken(getToken())
365
+ // return getLoginState().islogin
366
+ }
367
+
368
+ function getLoginState() {
369
+ let role: 'center' | 'tenant' = 'tenant' // center | tenant
370
+ let islogin = false
371
+ // 0: 未登录 缓存中没有token refreshtoken tokenexpires
372
+ // 1: 有登录过 缓存中有token refreshtoken tokenexpires token 过期 refreshtoken 过期
373
+ // 2: 有登录过 缓存中有token refreshtoken tokenexpires token 过期 refreshtoken 未过期
374
+ // 10: 有登录过 缓存中有token refreshtoken tokenexpires token 未过期 refreshtoken 未过期
375
+ let type: 0 | 1 | 2 | 10 = 0
376
+
341
377
  const token = getToken()
378
+
342
379
  if (token) {
343
- if (getRole() === 'center') {
344
- haslogged = checkLoginByToken(token)
380
+ role = getRoleByToken(token)
381
+ if (role === 'center') {
382
+ // 产品运营中心的token是永久的不会过期 且 没有 refreshtoken 和 tokenexpires
383
+ islogin = checkLoginByToken(token)
384
+ type = 10
345
385
  } else {
346
386
  const refreshtoken = getRefreshToken()
347
387
  const tokenexpires = getTokenExpires()
348
388
  const now = Date.now()
349
- if (token && refreshtoken && tokenexpires && Number(tokenexpires) > now) {
350
- haslogged = checkLoginByToken(token)
389
+
390
+ if (refreshtoken && tokenexpires) {
391
+ if (Number(tokenexpires) > now && checkLoginByToken(token)) {
392
+ islogin = true
393
+ type = 10
394
+ } else {
395
+ islogin = false
396
+ if (checkLoginByToken(refreshtoken)) {
397
+ type = 2
398
+ } else {
399
+ type = 1
400
+ }
401
+ }
351
402
  }
352
403
  }
353
404
  }
354
- return haslogged
355
- }
356
405
 
357
- // 检测token是否过期
358
- function checkLoginByToken(token?: string) {
359
- let haslogged = false
360
- if (token) {
361
- const now = Date.now()
362
- const jwtInfo = parseToken(token)
363
- if (jwtInfo?.exp) {
364
- haslogged = Number(jwtInfo.exp + '000') > now
365
- } else {
366
- haslogged = false
367
- }
406
+ return {
407
+ role,
408
+ islogin,
409
+ type
368
410
  }
369
- return haslogged
370
411
  }
371
412
 
372
413
  // 接口请求回来的 userInfo 有 functioncodes 以便做权限校验
@@ -594,7 +635,6 @@ export {
594
635
  // removeRefreshToken,
595
636
  updateToken,
596
637
  // startRefreshtoken,
597
- // stopRefreshtoken,
598
638
  getUser,
599
639
  // setUser,
600
640
  getRole,
@@ -602,6 +642,7 @@ export {
602
642
  // getUserByToken,
603
643
  // setUserByToken,
604
644
  checkLogin,
645
+ getLoginState,
605
646
  // checkLoginByToken,
606
647
  singleLogin
607
648
  }