@smart100/spu-web-plugin 1.0.7 → 1.0.8
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 +148 -134
- package/package.json +1 -1
- package/src/login.ts +96 -89
package/dist/spu-web-plugin.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var version = "1.0.
|
|
1
|
+
var version = "1.0.8";
|
|
2
2
|
|
|
3
3
|
/** Detect free variable `global` from Node.js. */
|
|
4
4
|
var freeGlobal$2 = typeof global == 'object' && global && global.Object === Object && global;
|
|
@@ -16169,95 +16169,6 @@ function setRefreshToken(value) {
|
|
|
16169
16169
|
function removeRefreshToken() {
|
|
16170
16170
|
removeData('refreshtoken');
|
|
16171
16171
|
}
|
|
16172
|
-
function updateToken() {
|
|
16173
|
-
var loginState = getLoginState();
|
|
16174
|
-
if (!loginState.islogin && loginState.type <= 1) {
|
|
16175
|
-
console.warn('当前未登录/token过期,不支持自动刷新token。');
|
|
16176
|
-
return false;
|
|
16177
|
-
}
|
|
16178
|
-
if (loginState.role === 'center') {
|
|
16179
|
-
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
|
|
16180
|
-
return false;
|
|
16181
|
-
}
|
|
16182
|
-
var token = getToken();
|
|
16183
|
-
var refreshtoken = getRefreshToken();
|
|
16184
|
-
var sendToken = checkLoginByToken(token) ? token : refreshtoken;
|
|
16185
|
-
return normalAxios$1.get('/api/auth/refreshtoken', {
|
|
16186
|
-
params: {
|
|
16187
|
-
refreshtoken: sendToken
|
|
16188
|
-
},
|
|
16189
|
-
isShowLoading: false,
|
|
16190
|
-
isShowErrorMessage: false,
|
|
16191
|
-
isSendToken: false,
|
|
16192
|
-
isSendTecode: true,
|
|
16193
|
-
headers: {
|
|
16194
|
-
token: sendToken
|
|
16195
|
-
}
|
|
16196
|
-
}).then(function (res) {
|
|
16197
|
-
// console.log(res)
|
|
16198
|
-
var data = res === null || res === void 0 ? void 0 : res.data;
|
|
16199
|
-
if (data) {
|
|
16200
|
-
setToken(data.token);
|
|
16201
|
-
setRefreshToken(data.refreshtoken);
|
|
16202
|
-
setTokenExpires(data.tokenexpires);
|
|
16203
|
-
}
|
|
16204
|
-
});
|
|
16205
|
-
}
|
|
16206
|
-
var refreshtokenTimer = null;
|
|
16207
|
-
function startRefreshtoken() {
|
|
16208
|
-
var loginState = getLoginState();
|
|
16209
|
-
// 如果是产品运营中心 则不走刷新token流程
|
|
16210
|
-
if (loginState.role === 'center') {
|
|
16211
|
-
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
|
|
16212
|
-
return false;
|
|
16213
|
-
}
|
|
16214
|
-
// stopRefreshtoken()
|
|
16215
|
-
clearTimeout(refreshtokenTimer);
|
|
16216
|
-
refreshtokenTimer = null;
|
|
16217
|
-
// 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
|
|
16218
|
-
// 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
|
|
16219
|
-
// 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
16220
|
-
var time = 0;
|
|
16221
|
-
if (loginState.islogin) {
|
|
16222
|
-
var user = getUserByToken(getRefreshToken());
|
|
16223
|
-
if (user !== null && user !== void 0 && user.tokenId) {
|
|
16224
|
-
time = Number(getTokenExpires()) - Date.now() - 1000 * 15;
|
|
16225
|
-
// 如果剩余时间大于10分钟 则每隔10分钟刷一次
|
|
16226
|
-
if (time > 600000) {
|
|
16227
|
-
time = 600000;
|
|
16228
|
-
} else if (time < 0) {
|
|
16229
|
-
time = 0;
|
|
16230
|
-
}
|
|
16231
|
-
} else {
|
|
16232
|
-
time = 10000;
|
|
16233
|
-
}
|
|
16234
|
-
} else {
|
|
16235
|
-
if (loginState.type === 2) {
|
|
16236
|
-
time = 0;
|
|
16237
|
-
} else {
|
|
16238
|
-
time = 10000;
|
|
16239
|
-
}
|
|
16240
|
-
}
|
|
16241
|
-
// time = 5000
|
|
16242
|
-
refreshtokenTimer = window.setTimeout( /*#__PURE__*/_asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
|
|
16243
|
-
return _regeneratorRuntime$1().wrap(function _callee$(_context) {
|
|
16244
|
-
while (1) switch (_context.prev = _context.next) {
|
|
16245
|
-
case 0:
|
|
16246
|
-
if (!(getLoginState().type >= 2)) {
|
|
16247
|
-
_context.next = 3;
|
|
16248
|
-
break;
|
|
16249
|
-
}
|
|
16250
|
-
_context.next = 3;
|
|
16251
|
-
return updateToken();
|
|
16252
|
-
case 3:
|
|
16253
|
-
startRefreshtoken();
|
|
16254
|
-
case 4:
|
|
16255
|
-
case "end":
|
|
16256
|
-
return _context.stop();
|
|
16257
|
-
}
|
|
16258
|
-
}, _callee);
|
|
16259
|
-
})), time);
|
|
16260
|
-
}
|
|
16261
16172
|
function getUser(key) {
|
|
16262
16173
|
var user = getData('user');
|
|
16263
16174
|
var userObj = user ? JSON.parse(user) : null;
|
|
@@ -16620,6 +16531,96 @@ function _requestAndSetTenantSetting() {
|
|
|
16620
16531
|
function removeTenantSetting() {
|
|
16621
16532
|
lsProxy.removeItem('tenantsetting');
|
|
16622
16533
|
}
|
|
16534
|
+
function updateToken() {
|
|
16535
|
+
var loginState = getLoginState();
|
|
16536
|
+
if (!loginState.islogin && loginState.type <= 1) {
|
|
16537
|
+
console.warn('当前未登录/token过期,不支持自动刷新token。');
|
|
16538
|
+
return false;
|
|
16539
|
+
}
|
|
16540
|
+
if (loginState.role === 'center') {
|
|
16541
|
+
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
|
|
16542
|
+
return false;
|
|
16543
|
+
}
|
|
16544
|
+
var token = getToken();
|
|
16545
|
+
var refreshtoken = getRefreshToken();
|
|
16546
|
+
var sendToken = checkLoginByToken(token) ? token : refreshtoken;
|
|
16547
|
+
return normalAxios$1.get('/api/auth/refreshtoken', {
|
|
16548
|
+
params: {
|
|
16549
|
+
refreshtoken: sendToken
|
|
16550
|
+
},
|
|
16551
|
+
isShowLoading: false,
|
|
16552
|
+
isShowErrorMessage: false,
|
|
16553
|
+
isSendToken: false,
|
|
16554
|
+
isSendTecode: true,
|
|
16555
|
+
headers: {
|
|
16556
|
+
token: sendToken
|
|
16557
|
+
}
|
|
16558
|
+
}).then(function (res) {
|
|
16559
|
+
// console.log(res)
|
|
16560
|
+
var data = res === null || res === void 0 ? void 0 : res.data;
|
|
16561
|
+
if (data) {
|
|
16562
|
+
setToken(data.token);
|
|
16563
|
+
setRefreshToken(data.refreshtoken);
|
|
16564
|
+
setTokenExpires(data.tokenexpires);
|
|
16565
|
+
}
|
|
16566
|
+
});
|
|
16567
|
+
}
|
|
16568
|
+
var refreshtokenTimer = null;
|
|
16569
|
+
function startRefreshtoken() {
|
|
16570
|
+
var loginState = getLoginState();
|
|
16571
|
+
// 如果是产品运营中心 则不走刷新token流程
|
|
16572
|
+
if (loginState.role === 'center') {
|
|
16573
|
+
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。');
|
|
16574
|
+
return false;
|
|
16575
|
+
}
|
|
16576
|
+
// stopRefreshtoken()
|
|
16577
|
+
clearTimeout(refreshtokenTimer);
|
|
16578
|
+
refreshtokenTimer = null;
|
|
16579
|
+
// 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
|
|
16580
|
+
// 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
|
|
16581
|
+
// 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
16582
|
+
var time = 0;
|
|
16583
|
+
if (loginState.islogin) {
|
|
16584
|
+
var user = getUserByToken(getRefreshToken());
|
|
16585
|
+
if (user !== null && user !== void 0 && user.tokenId) {
|
|
16586
|
+
time = Number(getTokenExpires()) - Date.now() - 1000 * 15;
|
|
16587
|
+
// 如果剩余时间大于10分钟 则每隔10分钟刷一次
|
|
16588
|
+
if (time > 600000) {
|
|
16589
|
+
time = 600000;
|
|
16590
|
+
} else if (time < 0) {
|
|
16591
|
+
time = 0;
|
|
16592
|
+
}
|
|
16593
|
+
} else {
|
|
16594
|
+
time = 10000;
|
|
16595
|
+
}
|
|
16596
|
+
} else {
|
|
16597
|
+
if (loginState.type === 2) {
|
|
16598
|
+
time = 0;
|
|
16599
|
+
} else {
|
|
16600
|
+
console.error('未登录,10秒后尝试更新token');
|
|
16601
|
+
time = 30000;
|
|
16602
|
+
}
|
|
16603
|
+
}
|
|
16604
|
+
// time = 5000
|
|
16605
|
+
refreshtokenTimer = window.setTimeout( /*#__PURE__*/_asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
|
|
16606
|
+
return _regeneratorRuntime$1().wrap(function _callee$(_context) {
|
|
16607
|
+
while (1) switch (_context.prev = _context.next) {
|
|
16608
|
+
case 0:
|
|
16609
|
+
if (!(getLoginState().type >= 2)) {
|
|
16610
|
+
_context.next = 3;
|
|
16611
|
+
break;
|
|
16612
|
+
}
|
|
16613
|
+
_context.next = 3;
|
|
16614
|
+
return updateToken();
|
|
16615
|
+
case 3:
|
|
16616
|
+
startRefreshtoken();
|
|
16617
|
+
case 4:
|
|
16618
|
+
case "end":
|
|
16619
|
+
return _context.stop();
|
|
16620
|
+
}
|
|
16621
|
+
}, _callee);
|
|
16622
|
+
})), time);
|
|
16623
|
+
}
|
|
16623
16624
|
// 单点登录
|
|
16624
16625
|
function singleLogin(_x3) {
|
|
16625
16626
|
return _singleLogin.apply(this, arguments);
|
|
@@ -16648,7 +16649,7 @@ function _singleLogin() {
|
|
|
16648
16649
|
envname = query.envname;
|
|
16649
16650
|
context = query.context;
|
|
16650
16651
|
if (!checkLoginByToken(token)) {
|
|
16651
|
-
_context6.next =
|
|
16652
|
+
_context6.next = 60;
|
|
16652
16653
|
break;
|
|
16653
16654
|
}
|
|
16654
16655
|
isneedlogin = true; // 是否需要走单点登录流程
|
|
@@ -16670,91 +16671,104 @@ function _singleLogin() {
|
|
|
16670
16671
|
// isneedlogin = true
|
|
16671
16672
|
// debugger
|
|
16672
16673
|
if (!isneedlogin) {
|
|
16673
|
-
_context6.next =
|
|
16674
|
+
_context6.next = 58;
|
|
16674
16675
|
break;
|
|
16675
16676
|
}
|
|
16676
16677
|
setBaseInfo();
|
|
16677
|
-
// 单点登录写入 token 之后
|
|
16678
|
-
|
|
16679
|
-
|
|
16680
|
-
|
|
16681
|
-
|
|
16682
|
-
|
|
16683
|
-
updateToken();
|
|
16684
|
-
}
|
|
16685
|
-
}
|
|
16686
|
-
} catch (err) {
|
|
16687
|
-
console.error(err);
|
|
16678
|
+
// 单点登录写入 token 之后
|
|
16679
|
+
// 1、如果 refreshtoken 不完整 则换取完整的 refreshtoken
|
|
16680
|
+
_context6.prev = 14;
|
|
16681
|
+
if (!checkLogin()) {
|
|
16682
|
+
_context6.next = 21;
|
|
16683
|
+
break;
|
|
16688
16684
|
}
|
|
16685
|
+
refreshTokenUser = getUserByToken(getRefreshToken());
|
|
16686
|
+
tokenUser = getUserByToken(getToken());
|
|
16687
|
+
if (!(!(refreshTokenUser !== null && refreshTokenUser !== void 0 && refreshTokenUser.tokenId) && tokenUser !== null && tokenUser !== void 0 && tokenUser.tokenId)) {
|
|
16688
|
+
_context6.next = 21;
|
|
16689
|
+
break;
|
|
16690
|
+
}
|
|
16691
|
+
_context6.next = 21;
|
|
16692
|
+
return updateToken();
|
|
16693
|
+
case 21:
|
|
16694
|
+
_context6.next = 26;
|
|
16695
|
+
break;
|
|
16696
|
+
case 23:
|
|
16697
|
+
_context6.prev = 23;
|
|
16698
|
+
_context6.t0 = _context6["catch"](14);
|
|
16699
|
+
console.error(_context6.t0);
|
|
16700
|
+
case 26:
|
|
16701
|
+
// 2、重新计算刷新 token 时间 因为刚开始进入就 startRefreshtoken 检测到没有 token 会过10秒才执行刷新 token 操作
|
|
16702
|
+
startRefreshtoken();
|
|
16689
16703
|
// 获取环境信息和租户配置信息
|
|
16690
|
-
_context6.next =
|
|
16704
|
+
_context6.next = 29;
|
|
16691
16705
|
return getEnvname();
|
|
16692
|
-
case
|
|
16706
|
+
case 29:
|
|
16693
16707
|
nowEnvname = _context6.sent;
|
|
16694
16708
|
if (!nowEnvname) {
|
|
16695
|
-
_context6.next =
|
|
16709
|
+
_context6.next = 50;
|
|
16696
16710
|
break;
|
|
16697
16711
|
}
|
|
16698
|
-
_context6.next =
|
|
16712
|
+
_context6.next = 33;
|
|
16699
16713
|
return requestEnvdata(nowEnvname);
|
|
16700
|
-
case
|
|
16714
|
+
case 33:
|
|
16701
16715
|
envData = _context6.sent;
|
|
16702
16716
|
if (!envData) {
|
|
16703
|
-
_context6.next =
|
|
16717
|
+
_context6.next = 46;
|
|
16704
16718
|
break;
|
|
16705
16719
|
}
|
|
16706
16720
|
saveEnvdata(envData);
|
|
16707
16721
|
if (!envData.tenantcode) {
|
|
16708
|
-
_context6.next =
|
|
16722
|
+
_context6.next = 42;
|
|
16709
16723
|
break;
|
|
16710
16724
|
}
|
|
16711
16725
|
setTecode(envData.tenantcode);
|
|
16712
16726
|
// 租户配置
|
|
16713
|
-
_context6.next =
|
|
16727
|
+
_context6.next = 40;
|
|
16714
16728
|
return requestAndSetTenantSetting(envData.tenantcode);
|
|
16715
|
-
case
|
|
16716
|
-
_context6.next =
|
|
16729
|
+
case 40:
|
|
16730
|
+
_context6.next = 44;
|
|
16717
16731
|
break;
|
|
16718
|
-
case
|
|
16732
|
+
case 42:
|
|
16719
16733
|
removeTenantSetting();
|
|
16720
16734
|
removeTecode();
|
|
16721
|
-
case
|
|
16722
|
-
_context6.next =
|
|
16735
|
+
case 44:
|
|
16736
|
+
_context6.next = 48;
|
|
16723
16737
|
break;
|
|
16724
|
-
case
|
|
16738
|
+
case 46:
|
|
16725
16739
|
removeEnvdata();
|
|
16726
16740
|
removeTecode();
|
|
16727
|
-
case
|
|
16728
|
-
_context6.next =
|
|
16741
|
+
case 48:
|
|
16742
|
+
_context6.next = 52;
|
|
16729
16743
|
break;
|
|
16730
|
-
case
|
|
16744
|
+
case 50:
|
|
16731
16745
|
removeEnvdata();
|
|
16732
16746
|
removeTecode();
|
|
16733
|
-
case
|
|
16734
|
-
_context6.next =
|
|
16747
|
+
case 52:
|
|
16748
|
+
_context6.next = 54;
|
|
16735
16749
|
return getAndSetTenant();
|
|
16736
|
-
case
|
|
16737
|
-
_context6.next =
|
|
16750
|
+
case 54:
|
|
16751
|
+
_context6.next = 56;
|
|
16738
16752
|
return getAndSetUserInfo();
|
|
16739
|
-
case
|
|
16753
|
+
case 56:
|
|
16740
16754
|
// 单点登录后 获取 web 开发者模式 如果是则设置 isdebugger
|
|
16741
16755
|
urlquery.dealWebDebugger();
|
|
16742
16756
|
flag = true;
|
|
16743
|
-
case
|
|
16744
|
-
_context6.next =
|
|
16757
|
+
case 58:
|
|
16758
|
+
_context6.next = 63;
|
|
16745
16759
|
break;
|
|
16746
|
-
case
|
|
16760
|
+
case 60:
|
|
16747
16761
|
flag = false;
|
|
16748
16762
|
setBaseInfo(); // 传递的token过期依然写入 如果不写入的话 有可能之前的token本来没过期 页面依然可用
|
|
16749
16763
|
console.error('单点登录失败,请检查链接所传 token/refreshtoken/tokenexpires 是否非法或过期。');
|
|
16750
|
-
case
|
|
16764
|
+
case 63:
|
|
16751
16765
|
if (!flag) {
|
|
16752
|
-
_context6.next =
|
|
16766
|
+
_context6.next = 66;
|
|
16753
16767
|
break;
|
|
16754
16768
|
}
|
|
16755
|
-
_context6.next =
|
|
16769
|
+
_context6.next = 66;
|
|
16756
16770
|
return core$1.initGetData();
|
|
16757
|
-
case
|
|
16771
|
+
case 66:
|
|
16758
16772
|
if (flag) {
|
|
16759
16773
|
// 单点登录成功 需要删除 query 中相关参数
|
|
16760
16774
|
token && delete query.token;
|
|
@@ -16767,11 +16781,11 @@ function _singleLogin() {
|
|
|
16767
16781
|
flag: flag,
|
|
16768
16782
|
query: query
|
|
16769
16783
|
});
|
|
16770
|
-
case
|
|
16784
|
+
case 68:
|
|
16771
16785
|
case "end":
|
|
16772
16786
|
return _context6.stop();
|
|
16773
16787
|
}
|
|
16774
|
-
}, _callee6);
|
|
16788
|
+
}, _callee6, null, [[14, 23]]);
|
|
16775
16789
|
}));
|
|
16776
16790
|
return _singleLogin.apply(this, arguments);
|
|
16777
16791
|
}
|
package/package.json
CHANGED
package/src/login.ts
CHANGED
|
@@ -63,93 +63,6 @@ function removeRefreshToken() {
|
|
|
63
63
|
removeData('refreshtoken')
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function updateToken() {
|
|
67
|
-
const loginState = getLoginState()
|
|
68
|
-
|
|
69
|
-
if (!loginState.islogin && loginState.type <= 1) {
|
|
70
|
-
console.warn('当前未登录/token过期,不支持自动刷新token。')
|
|
71
|
-
return false
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (loginState.role === 'center') {
|
|
75
|
-
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
|
|
76
|
-
return false
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const token = getToken()
|
|
80
|
-
const refreshtoken = getRefreshToken()
|
|
81
|
-
const sendToken = checkLoginByToken(token) ? token : refreshtoken
|
|
82
|
-
return axios
|
|
83
|
-
.get('/api/auth/refreshtoken', {
|
|
84
|
-
params: {
|
|
85
|
-
refreshtoken: sendToken
|
|
86
|
-
},
|
|
87
|
-
isShowLoading: false,
|
|
88
|
-
isShowErrorMessage: false,
|
|
89
|
-
isSendToken: false,
|
|
90
|
-
isSendTecode: true,
|
|
91
|
-
headers: {
|
|
92
|
-
token: sendToken
|
|
93
|
-
}
|
|
94
|
-
})
|
|
95
|
-
.then((res: any) => {
|
|
96
|
-
// console.log(res)
|
|
97
|
-
const data = res?.data
|
|
98
|
-
if (data) {
|
|
99
|
-
setToken(data.token)
|
|
100
|
-
setRefreshToken(data.refreshtoken)
|
|
101
|
-
setTokenExpires(data.tokenexpires)
|
|
102
|
-
}
|
|
103
|
-
})
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
let refreshtokenTimer: number | null = null
|
|
107
|
-
|
|
108
|
-
function startRefreshtoken() {
|
|
109
|
-
const loginState = getLoginState()
|
|
110
|
-
// 如果是产品运营中心 则不走刷新token流程
|
|
111
|
-
if (loginState.role === 'center') {
|
|
112
|
-
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
|
|
113
|
-
return false
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// stopRefreshtoken()
|
|
117
|
-
clearTimeout(refreshtokenTimer as number)
|
|
118
|
-
refreshtokenTimer = null
|
|
119
|
-
|
|
120
|
-
// 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
|
|
121
|
-
// 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
|
|
122
|
-
// 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
123
|
-
let time = 0
|
|
124
|
-
if (loginState.islogin) {
|
|
125
|
-
const user = getUserByToken(getRefreshToken())
|
|
126
|
-
if (user?.tokenId) {
|
|
127
|
-
time = Number(getTokenExpires()) - Date.now() - 1000 * 15
|
|
128
|
-
// 如果剩余时间大于10分钟 则每隔10分钟刷一次
|
|
129
|
-
if (time > 600000) {
|
|
130
|
-
time = 600000
|
|
131
|
-
} else if (time < 0) {
|
|
132
|
-
time = 0
|
|
133
|
-
}
|
|
134
|
-
} else {
|
|
135
|
-
time = 10000
|
|
136
|
-
}
|
|
137
|
-
} else {
|
|
138
|
-
if (loginState.type === 2) {
|
|
139
|
-
time = 0
|
|
140
|
-
} else {
|
|
141
|
-
time = 10000
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// time = 5000
|
|
145
|
-
refreshtokenTimer = window.setTimeout(async () => {
|
|
146
|
-
if (getLoginState().type >= 2) {
|
|
147
|
-
await updateToken()
|
|
148
|
-
}
|
|
149
|
-
startRefreshtoken()
|
|
150
|
-
}, time)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
66
|
function getUser(key?: string): any {
|
|
154
67
|
const user = getData('user')
|
|
155
68
|
const userObj = user ? JSON.parse(user) : null
|
|
@@ -479,6 +392,97 @@ function removeTenantSetting() {
|
|
|
479
392
|
lsProxy.removeItem('tenantsetting')
|
|
480
393
|
}
|
|
481
394
|
|
|
395
|
+
|
|
396
|
+
function updateToken() {
|
|
397
|
+
const loginState = getLoginState()
|
|
398
|
+
|
|
399
|
+
if (!loginState.islogin && loginState.type <= 1) {
|
|
400
|
+
console.warn('当前未登录/token过期,不支持自动刷新token。')
|
|
401
|
+
return false
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (loginState.role === 'center') {
|
|
405
|
+
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
|
|
406
|
+
return false
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
const token = getToken()
|
|
410
|
+
const refreshtoken = getRefreshToken()
|
|
411
|
+
const sendToken = checkLoginByToken(token) ? token : refreshtoken
|
|
412
|
+
return axios
|
|
413
|
+
.get('/api/auth/refreshtoken', {
|
|
414
|
+
params: {
|
|
415
|
+
refreshtoken: sendToken
|
|
416
|
+
},
|
|
417
|
+
isShowLoading: false,
|
|
418
|
+
isShowErrorMessage: false,
|
|
419
|
+
isSendToken: false,
|
|
420
|
+
isSendTecode: true,
|
|
421
|
+
headers: {
|
|
422
|
+
token: sendToken
|
|
423
|
+
}
|
|
424
|
+
})
|
|
425
|
+
.then((res: any) => {
|
|
426
|
+
// console.log(res)
|
|
427
|
+
const data = res?.data
|
|
428
|
+
if (data) {
|
|
429
|
+
setToken(data.token)
|
|
430
|
+
setRefreshToken(data.refreshtoken)
|
|
431
|
+
setTokenExpires(data.tokenexpires)
|
|
432
|
+
}
|
|
433
|
+
})
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
let refreshtokenTimer: number | null = null
|
|
437
|
+
|
|
438
|
+
function startRefreshtoken() {
|
|
439
|
+
const loginState = getLoginState()
|
|
440
|
+
// 如果是产品运营中心 则不走刷新token流程
|
|
441
|
+
if (loginState.role === 'center') {
|
|
442
|
+
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
|
|
443
|
+
return false
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// stopRefreshtoken()
|
|
447
|
+
clearTimeout(refreshtokenTimer as number)
|
|
448
|
+
refreshtokenTimer = null
|
|
449
|
+
|
|
450
|
+
// 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
|
|
451
|
+
// 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
|
|
452
|
+
// 如果没登录 每隔10秒走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
453
|
+
let time = 0
|
|
454
|
+
if (loginState.islogin) {
|
|
455
|
+
const user = getUserByToken(getRefreshToken())
|
|
456
|
+
if (user?.tokenId) {
|
|
457
|
+
time = Number(getTokenExpires()) - Date.now() - 1000 * 15
|
|
458
|
+
// 如果剩余时间大于10分钟 则每隔10分钟刷一次
|
|
459
|
+
if (time > 600000) {
|
|
460
|
+
time = 600000
|
|
461
|
+
} else if (time < 0) {
|
|
462
|
+
time = 0
|
|
463
|
+
}
|
|
464
|
+
} else {
|
|
465
|
+
time = 10000
|
|
466
|
+
}
|
|
467
|
+
} else {
|
|
468
|
+
if (loginState.type === 2) {
|
|
469
|
+
time = 0
|
|
470
|
+
} else {
|
|
471
|
+
console.error('未登录,10秒后尝试更新token')
|
|
472
|
+
time = 30000
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
// time = 5000
|
|
476
|
+
refreshtokenTimer = window.setTimeout(async () => {
|
|
477
|
+
if (getLoginState().type >= 2) {
|
|
478
|
+
await updateToken()
|
|
479
|
+
}
|
|
480
|
+
startRefreshtoken()
|
|
481
|
+
}, time)
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
482
486
|
// 单点登录
|
|
483
487
|
async function singleLogin(query: IAny) {
|
|
484
488
|
query = cloneDeep(query)
|
|
@@ -530,18 +534,21 @@ async function singleLogin(query: IAny) {
|
|
|
530
534
|
if (isneedlogin) {
|
|
531
535
|
setBaseInfo()
|
|
532
536
|
|
|
533
|
-
// 单点登录写入 token 之后
|
|
537
|
+
// 单点登录写入 token 之后
|
|
538
|
+
// 1、如果 refreshtoken 不完整 则换取完整的 refreshtoken
|
|
534
539
|
try {
|
|
535
540
|
if (checkLogin()) {
|
|
536
541
|
const refreshTokenUser = getUserByToken(getRefreshToken())
|
|
537
542
|
const tokenUser = getUserByToken(getToken())
|
|
538
543
|
if (!refreshTokenUser?.tokenId && tokenUser?.tokenId) {
|
|
539
|
-
updateToken()
|
|
544
|
+
await updateToken()
|
|
540
545
|
}
|
|
541
546
|
}
|
|
542
547
|
} catch (err) {
|
|
543
548
|
console.error(err)
|
|
544
549
|
}
|
|
550
|
+
// 2、重新计算刷新 token 时间 因为刚开始进入就 startRefreshtoken 检测到没有 token 会过10秒才执行刷新 token 操作
|
|
551
|
+
startRefreshtoken()
|
|
545
552
|
|
|
546
553
|
// 获取环境信息和租户配置信息
|
|
547
554
|
const nowEnvname = await getEnvname()
|