@smart100/spu-web-plugin 1.0.6 → 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 +176 -156
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/login.ts +119 -109
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,16 +16531,116 @@ 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);
|
|
16626
16627
|
}
|
|
16627
16628
|
function _singleLogin() {
|
|
16628
16629
|
_singleLogin = _asyncToGenerator$1( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee6(query) {
|
|
16629
|
-
var flag, token, refreshtoken, tokenexpires, envname, context, isneedlogin, loginRole, refreshTokenUser, tokenUser, nowEnvname, envData;
|
|
16630
|
+
var flag, token, refreshtoken, tokenexpires, envname, context, setBaseInfo, isneedlogin, loginRole, refreshTokenUser, tokenUser, nowEnvname, envData;
|
|
16630
16631
|
return _regeneratorRuntime$1().wrap(function _callee6$(_context6) {
|
|
16631
16632
|
while (1) switch (_context6.prev = _context6.next) {
|
|
16632
16633
|
case 0:
|
|
16634
|
+
setBaseInfo = function _setBaseInfo() {
|
|
16635
|
+
setToken(token);
|
|
16636
|
+
setUserByToken(token); // 解析token为用户信息存入
|
|
16637
|
+
refreshtoken ? setRefreshToken(refreshtoken) : removeRefreshToken();
|
|
16638
|
+
tokenexpires ? setTokenExpires(tokenexpires) : removeTokenExpires();
|
|
16639
|
+
envname ? setQueryEnvname(envname) : removeQueryEnvname();
|
|
16640
|
+
// context 上下文字段 产品运营中心安装 卸载 配置 和 产品配置中心业务配置 页面需要用到
|
|
16641
|
+
// web 端有传 app没传 需要做兼容
|
|
16642
|
+
context && lsProxy.setItem('context', decodeURIComponent(context));
|
|
16643
|
+
};
|
|
16633
16644
|
query = cloneDeep$1(query);
|
|
16634
16645
|
flag = false; // 是否登录成功
|
|
16635
16646
|
token = query.token;
|
|
@@ -16638,7 +16649,7 @@ function _singleLogin() {
|
|
|
16638
16649
|
envname = query.envname;
|
|
16639
16650
|
context = query.context;
|
|
16640
16651
|
if (!checkLoginByToken(token)) {
|
|
16641
|
-
_context6.next =
|
|
16652
|
+
_context6.next = 60;
|
|
16642
16653
|
break;
|
|
16643
16654
|
}
|
|
16644
16655
|
isneedlogin = true; // 是否需要走单点登录流程
|
|
@@ -16660,113 +16671,121 @@ function _singleLogin() {
|
|
|
16660
16671
|
// isneedlogin = true
|
|
16661
16672
|
// debugger
|
|
16662
16673
|
if (!isneedlogin) {
|
|
16663
|
-
_context6.next =
|
|
16674
|
+
_context6.next = 58;
|
|
16664
16675
|
break;
|
|
16665
16676
|
}
|
|
16666
|
-
|
|
16667
|
-
|
|
16668
|
-
|
|
16669
|
-
|
|
16670
|
-
|
|
16671
|
-
|
|
16672
|
-
|
|
16673
|
-
|
|
16674
|
-
|
|
16675
|
-
|
|
16676
|
-
|
|
16677
|
-
|
|
16678
|
-
|
|
16679
|
-
if (!(refreshTokenUser !== null && refreshTokenUser !== void 0 && refreshTokenUser.tokenId) && tokenUser !== null && tokenUser !== void 0 && tokenUser.tokenId) {
|
|
16680
|
-
updateToken();
|
|
16681
|
-
}
|
|
16682
|
-
}
|
|
16683
|
-
} catch (err) {
|
|
16684
|
-
console.error(err);
|
|
16677
|
+
setBaseInfo();
|
|
16678
|
+
// 单点登录写入 token 之后
|
|
16679
|
+
// 1、如果 refreshtoken 不完整 则换取完整的 refreshtoken
|
|
16680
|
+
_context6.prev = 14;
|
|
16681
|
+
if (!checkLogin()) {
|
|
16682
|
+
_context6.next = 21;
|
|
16683
|
+
break;
|
|
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;
|
|
16685
16690
|
}
|
|
16686
|
-
// 获取环境信息和租户配置信息
|
|
16687
16691
|
_context6.next = 21;
|
|
16688
|
-
return
|
|
16692
|
+
return updateToken();
|
|
16689
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();
|
|
16703
|
+
// 获取环境信息和租户配置信息
|
|
16704
|
+
_context6.next = 29;
|
|
16705
|
+
return getEnvname();
|
|
16706
|
+
case 29:
|
|
16690
16707
|
nowEnvname = _context6.sent;
|
|
16691
16708
|
if (!nowEnvname) {
|
|
16692
|
-
_context6.next =
|
|
16709
|
+
_context6.next = 50;
|
|
16693
16710
|
break;
|
|
16694
16711
|
}
|
|
16695
|
-
_context6.next =
|
|
16712
|
+
_context6.next = 33;
|
|
16696
16713
|
return requestEnvdata(nowEnvname);
|
|
16697
|
-
case
|
|
16714
|
+
case 33:
|
|
16698
16715
|
envData = _context6.sent;
|
|
16699
16716
|
if (!envData) {
|
|
16700
|
-
_context6.next =
|
|
16717
|
+
_context6.next = 46;
|
|
16701
16718
|
break;
|
|
16702
16719
|
}
|
|
16703
16720
|
saveEnvdata(envData);
|
|
16704
16721
|
if (!envData.tenantcode) {
|
|
16705
|
-
_context6.next =
|
|
16722
|
+
_context6.next = 42;
|
|
16706
16723
|
break;
|
|
16707
16724
|
}
|
|
16708
16725
|
setTecode(envData.tenantcode);
|
|
16709
16726
|
// 租户配置
|
|
16710
|
-
_context6.next =
|
|
16727
|
+
_context6.next = 40;
|
|
16711
16728
|
return requestAndSetTenantSetting(envData.tenantcode);
|
|
16712
|
-
case
|
|
16713
|
-
_context6.next =
|
|
16729
|
+
case 40:
|
|
16730
|
+
_context6.next = 44;
|
|
16714
16731
|
break;
|
|
16715
|
-
case
|
|
16732
|
+
case 42:
|
|
16716
16733
|
removeTenantSetting();
|
|
16717
16734
|
removeTecode();
|
|
16718
|
-
case
|
|
16719
|
-
_context6.next =
|
|
16735
|
+
case 44:
|
|
16736
|
+
_context6.next = 48;
|
|
16720
16737
|
break;
|
|
16721
|
-
case
|
|
16738
|
+
case 46:
|
|
16722
16739
|
removeEnvdata();
|
|
16723
16740
|
removeTecode();
|
|
16724
|
-
case
|
|
16725
|
-
_context6.next =
|
|
16741
|
+
case 48:
|
|
16742
|
+
_context6.next = 52;
|
|
16726
16743
|
break;
|
|
16727
|
-
case
|
|
16744
|
+
case 50:
|
|
16728
16745
|
removeEnvdata();
|
|
16729
16746
|
removeTecode();
|
|
16730
|
-
case
|
|
16731
|
-
_context6.next =
|
|
16747
|
+
case 52:
|
|
16748
|
+
_context6.next = 54;
|
|
16732
16749
|
return getAndSetTenant();
|
|
16733
|
-
case
|
|
16734
|
-
_context6.next =
|
|
16750
|
+
case 54:
|
|
16751
|
+
_context6.next = 56;
|
|
16735
16752
|
return getAndSetUserInfo();
|
|
16736
|
-
case
|
|
16753
|
+
case 56:
|
|
16737
16754
|
// 单点登录后 获取 web 开发者模式 如果是则设置 isdebugger
|
|
16738
16755
|
urlquery.dealWebDebugger();
|
|
16739
16756
|
flag = true;
|
|
16740
|
-
case
|
|
16741
|
-
_context6.next =
|
|
16757
|
+
case 58:
|
|
16758
|
+
_context6.next = 63;
|
|
16742
16759
|
break;
|
|
16743
|
-
case
|
|
16760
|
+
case 60:
|
|
16744
16761
|
flag = false;
|
|
16745
|
-
|
|
16746
|
-
|
|
16762
|
+
setBaseInfo(); // 传递的token过期依然写入 如果不写入的话 有可能之前的token本来没过期 页面依然可用
|
|
16763
|
+
console.error('单点登录失败,请检查链接所传 token/refreshtoken/tokenexpires 是否非法或过期。');
|
|
16764
|
+
case 63:
|
|
16747
16765
|
if (!flag) {
|
|
16748
|
-
_context6.next =
|
|
16766
|
+
_context6.next = 66;
|
|
16749
16767
|
break;
|
|
16750
16768
|
}
|
|
16751
|
-
_context6.next =
|
|
16769
|
+
_context6.next = 66;
|
|
16752
16770
|
return core$1.initGetData();
|
|
16753
|
-
case
|
|
16754
|
-
|
|
16755
|
-
|
|
16756
|
-
|
|
16757
|
-
|
|
16758
|
-
|
|
16759
|
-
|
|
16760
|
-
|
|
16771
|
+
case 66:
|
|
16772
|
+
if (flag) {
|
|
16773
|
+
// 单点登录成功 需要删除 query 中相关参数
|
|
16774
|
+
token && delete query.token;
|
|
16775
|
+
refreshtoken && delete query.refreshtoken;
|
|
16776
|
+
tokenexpires && delete query.tokenexpires;
|
|
16777
|
+
envname && delete query.envname;
|
|
16778
|
+
context && delete query.context;
|
|
16779
|
+
}
|
|
16761
16780
|
return _context6.abrupt("return", {
|
|
16762
16781
|
flag: flag,
|
|
16763
16782
|
query: query
|
|
16764
16783
|
});
|
|
16765
|
-
case
|
|
16784
|
+
case 68:
|
|
16766
16785
|
case "end":
|
|
16767
16786
|
return _context6.stop();
|
|
16768
16787
|
}
|
|
16769
|
-
}, _callee6);
|
|
16788
|
+
}, _callee6, null, [[14, 23]]);
|
|
16770
16789
|
}));
|
|
16771
16790
|
return _singleLogin.apply(this, arguments);
|
|
16772
16791
|
}
|
|
@@ -16780,7 +16799,7 @@ function installAuth(options) {
|
|
|
16780
16799
|
while (1) switch (_context2.prev = _context2.next) {
|
|
16781
16800
|
case 0:
|
|
16782
16801
|
if (!to.query.token) {
|
|
16783
|
-
_context2.next =
|
|
16802
|
+
_context2.next = 8;
|
|
16784
16803
|
break;
|
|
16785
16804
|
}
|
|
16786
16805
|
_context2.next = 3;
|
|
@@ -16794,14 +16813,14 @@ function installAuth(options) {
|
|
|
16794
16813
|
query: singleLoginRes.query
|
|
16795
16814
|
});
|
|
16796
16815
|
} else {
|
|
16797
|
-
console.error('单点登录失败,请检查链接所传 token 是否非法或过期。');
|
|
16798
16816
|
next();
|
|
16799
16817
|
}
|
|
16800
|
-
|
|
16818
|
+
options.singleLoginCallback && options.singleLoginCallback(singleLoginRes);
|
|
16819
|
+
_context2.next = 9;
|
|
16801
16820
|
break;
|
|
16802
|
-
case 7:
|
|
16803
|
-
next();
|
|
16804
16821
|
case 8:
|
|
16822
|
+
next();
|
|
16823
|
+
case 9:
|
|
16805
16824
|
case "end":
|
|
16806
16825
|
return _context2.stop();
|
|
16807
16826
|
}
|
|
@@ -68973,6 +68992,7 @@ var getDefaultGlobalOptions = function getDefaultGlobalOptions() {
|
|
|
68973
68992
|
modulekey: arr[1] || '',
|
|
68974
68993
|
moduleversion: arr[2] || '',
|
|
68975
68994
|
storageproxyprefix: '',
|
|
68995
|
+
singleLoginCallback: null,
|
|
68976
68996
|
router: null
|
|
68977
68997
|
};
|
|
68978
68998
|
};
|
package/package.json
CHANGED
package/src/index.ts
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)
|
|
@@ -490,6 +494,17 @@ async function singleLogin(query: IAny) {
|
|
|
490
494
|
const envname = query.envname
|
|
491
495
|
const context = query.context
|
|
492
496
|
|
|
497
|
+
function setBaseInfo() {
|
|
498
|
+
setToken(token)
|
|
499
|
+
setUserByToken(token) // 解析token为用户信息存入
|
|
500
|
+
refreshtoken ? setRefreshToken(refreshtoken) : removeRefreshToken()
|
|
501
|
+
tokenexpires ? setTokenExpires(tokenexpires) : removeTokenExpires()
|
|
502
|
+
envname ? setQueryEnvname(envname) : removeQueryEnvname()
|
|
503
|
+
// context 上下文字段 产品运营中心安装 卸载 配置 和 产品配置中心业务配置 页面需要用到
|
|
504
|
+
// web 端有传 app没传 需要做兼容
|
|
505
|
+
context && lsProxy.setItem('context', decodeURIComponent(context))
|
|
506
|
+
}
|
|
507
|
+
|
|
493
508
|
if (checkLoginByToken(token)) {
|
|
494
509
|
let isneedlogin = true // 是否需要走单点登录流程
|
|
495
510
|
const loginRole = getRoleByToken(token)
|
|
@@ -517,29 +532,23 @@ async function singleLogin(query: IAny) {
|
|
|
517
532
|
// debugger
|
|
518
533
|
|
|
519
534
|
if (isneedlogin) {
|
|
520
|
-
|
|
521
|
-
setUserByToken(token) // 解析token为用户信息存入
|
|
535
|
+
setBaseInfo()
|
|
522
536
|
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
envname ? setQueryEnvname(envname) : removeQueryEnvname()
|
|
526
|
-
|
|
527
|
-
// context 上下文字段 产品运营中心安装 卸载 配置 和 产品配置中心业务配置 页面需要用到
|
|
528
|
-
// web 端有传 app没传 需要做兼容
|
|
529
|
-
context && lsProxy.setItem('context', decodeURIComponent(context))
|
|
530
|
-
|
|
531
|
-
// 单点登录写入 token 之后 换取完整的 refreshtoken
|
|
537
|
+
// 单点登录写入 token 之后
|
|
538
|
+
// 1、如果 refreshtoken 不完整 则换取完整的 refreshtoken
|
|
532
539
|
try {
|
|
533
540
|
if (checkLogin()) {
|
|
534
541
|
const refreshTokenUser = getUserByToken(getRefreshToken())
|
|
535
542
|
const tokenUser = getUserByToken(getToken())
|
|
536
543
|
if (!refreshTokenUser?.tokenId && tokenUser?.tokenId) {
|
|
537
|
-
updateToken()
|
|
544
|
+
await updateToken()
|
|
538
545
|
}
|
|
539
546
|
}
|
|
540
547
|
} catch (err) {
|
|
541
548
|
console.error(err)
|
|
542
549
|
}
|
|
550
|
+
// 2、重新计算刷新 token 时间 因为刚开始进入就 startRefreshtoken 检测到没有 token 会过10秒才执行刷新 token 操作
|
|
551
|
+
startRefreshtoken()
|
|
543
552
|
|
|
544
553
|
// 获取环境信息和租户配置信息
|
|
545
554
|
const nowEnvname = await getEnvname()
|
|
@@ -575,7 +584,8 @@ async function singleLogin(query: IAny) {
|
|
|
575
584
|
}
|
|
576
585
|
} else {
|
|
577
586
|
flag = false
|
|
578
|
-
|
|
587
|
+
setBaseInfo() // 传递的token过期依然写入 如果不写入的话 有可能之前的token本来没过期 页面依然可用
|
|
588
|
+
console.error('单点登录失败,请检查链接所传 token/refreshtoken/tokenexpires 是否非法或过期。')
|
|
579
589
|
}
|
|
580
590
|
|
|
581
591
|
// 登录成功之后 获取spu信息
|
|
@@ -583,14 +593,14 @@ async function singleLogin(query: IAny) {
|
|
|
583
593
|
await core.initGetData()
|
|
584
594
|
}
|
|
585
595
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
596
|
+
if (flag) {
|
|
597
|
+
// 单点登录成功 需要删除 query 中相关参数
|
|
598
|
+
token && delete query.token
|
|
599
|
+
refreshtoken && delete query.refreshtoken
|
|
600
|
+
tokenexpires && delete query.tokenexpires
|
|
601
|
+
envname && delete query.envname
|
|
602
|
+
context && delete query.context
|
|
603
|
+
}
|
|
594
604
|
|
|
595
605
|
return {
|
|
596
606
|
flag,
|
|
@@ -617,9 +627,9 @@ function installAuth(options: any) {
|
|
|
617
627
|
query: singleLoginRes.query
|
|
618
628
|
})
|
|
619
629
|
} else {
|
|
620
|
-
console.error('单点登录失败,请检查链接所传 token 是否非法或过期。')
|
|
621
630
|
next()
|
|
622
631
|
}
|
|
632
|
+
options.singleLoginCallback && options.singleLoginCallback(singleLoginRes)
|
|
623
633
|
} else {
|
|
624
634
|
next()
|
|
625
635
|
}
|