@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.
- package/dist/spu-web-plugin.mjs +73 -43
- package/package.json +1 -1
- package/src/axios.ts +12 -8
- package/src/login.ts +76 -35
package/dist/spu-web-plugin.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var version = "1.0.
|
|
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
|
-
|
|
8336
|
-
|
|
8337
|
-
|
|
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
|
-
|
|
8636
|
-
if (
|
|
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
|
-
|
|
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 (
|
|
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
|
-
// 如果没登录 每隔
|
|
8679
|
+
// 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
8674
8680
|
var time = 0;
|
|
8675
|
-
if (
|
|
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
|
-
|
|
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 (!
|
|
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
|
-
|
|
8849
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8857
|
-
|
|
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 (
|
|
8863
|
-
|
|
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
|
|
8868
|
-
|
|
8869
|
-
|
|
8870
|
-
|
|
8871
|
-
|
|
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
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,
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
117
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
// 如果没登录 每隔
|
|
171
|
+
// 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
161
172
|
let time = 0
|
|
162
|
-
if (
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
344
|
-
|
|
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
|
-
|
|
350
|
-
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
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
|
}
|