@smart100/spu-web-plugin 0.0.34 → 0.0.35
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/index.d.ts +2 -2
- package/dist/spu-web-plugin.mjs +1287 -1177
- package/package.json +1 -1
- package/src/axios.ts +17 -2
- package/src/index.ts +8 -9
- package/src/login.ts +83 -22
- package/src/package/ali-oss/aliyun-oss-sdk.js +25121 -25121
- package/src/package/ali-oss/aliyun-oss-sdk.min.js +14 -14
- package/src/package/ali-oss/package.json +162 -162
- package/src/types/index.d.ts +2 -2
package/package.json
CHANGED
package/src/axios.ts
CHANGED
|
@@ -7,7 +7,7 @@ import type {
|
|
|
7
7
|
import { get } from 'lodash-es'
|
|
8
8
|
// import { Message } from 'element-ui'
|
|
9
9
|
import { loadding } from './components/loadding'
|
|
10
|
-
import
|
|
10
|
+
import login from './login'
|
|
11
11
|
import core from './core'
|
|
12
12
|
|
|
13
13
|
interface Response {
|
|
@@ -30,12 +30,27 @@ const createAxiosInstance = (type: 'spu' | 'normal' = 'spu', options: any) => {
|
|
|
30
30
|
|
|
31
31
|
axiosInstance.interceptors.request.use(async (config: any) => {
|
|
32
32
|
// const isShowLoading = typeof config?.isShowLoading !== 'undefined' ? config.isShowLoading : true
|
|
33
|
+
// console.error(444444)
|
|
34
|
+
// console.log(config)
|
|
35
|
+
|
|
33
36
|
const isShowLoading = get(config, 'isShowLoading', true)
|
|
34
37
|
isShowLoading && loadding.open()
|
|
35
38
|
|
|
36
39
|
const isSendToken = get(config, 'isSendToken', true)
|
|
37
40
|
if (isSendToken) {
|
|
38
|
-
|
|
41
|
+
|
|
42
|
+
// 请求接口前校验是否过期 如果过期先刷新token
|
|
43
|
+
if (config.url !== '/api/auth/refreshtoken') {
|
|
44
|
+
if (!login.checkLogin() && login.getRole() !== 'center') {
|
|
45
|
+
try {
|
|
46
|
+
await login.updateToken()
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.error(err)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const token = login.getToken()
|
|
39
54
|
if (config?.headers && token) {
|
|
40
55
|
config.headers.token = token
|
|
41
56
|
}
|
package/src/index.ts
CHANGED
|
@@ -19,8 +19,6 @@ import { expandexp } from './components/expandexp'
|
|
|
19
19
|
import { initApaasSpuTrack } from './apaasSpuTrack'
|
|
20
20
|
import { initTest } from './test'
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
22
|
// class SPUWebPlugin {
|
|
25
23
|
// static install = install
|
|
26
24
|
// static version = version
|
|
@@ -29,11 +27,12 @@ import { initTest } from './test'
|
|
|
29
27
|
// // SPUWebPlugin.version = version
|
|
30
28
|
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
// 基于部署路径查出 modulekey moduleversion
|
|
31
|
+
const arr = location.pathname.split('/')
|
|
33
32
|
const globalOptions: any = {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
moduleversion: '
|
|
33
|
+
modulename: '',
|
|
34
|
+
modulekey: arr[1] || '',
|
|
35
|
+
moduleversion: arr[2] || '',
|
|
37
36
|
storageproxyprefix: '',
|
|
38
37
|
router: null
|
|
39
38
|
}
|
|
@@ -118,13 +117,13 @@ const SPUWebPlugin = {
|
|
|
118
117
|
|
|
119
118
|
|
|
120
119
|
|
|
120
|
+
const updateToken = login.updateToken.bind(login)
|
|
121
121
|
const getToken = login.getToken.bind(login)
|
|
122
122
|
const getTokenExpires = login.getTokenExpires.bind(login)
|
|
123
123
|
const getRefreshToken = login.getRefreshToken.bind(login)
|
|
124
124
|
const getUser = login.getUser.bind(login)
|
|
125
125
|
const checkLogin = login.checkLogin.bind(login)
|
|
126
126
|
const singleLogin = login.singleLogin.bind(login)
|
|
127
|
-
const startRefreshtoken = login.startRefreshtoken.bind(login)
|
|
128
127
|
|
|
129
128
|
|
|
130
129
|
|
|
@@ -167,13 +166,13 @@ export {
|
|
|
167
166
|
setTitle,
|
|
168
167
|
isInApp,
|
|
169
168
|
AMapLoader,
|
|
169
|
+
singleLogin,
|
|
170
|
+
updateToken,
|
|
170
171
|
getToken,
|
|
171
172
|
getTokenExpires,
|
|
172
173
|
getRefreshToken,
|
|
173
174
|
getUser,
|
|
174
175
|
checkLogin,
|
|
175
|
-
singleLogin,
|
|
176
|
-
startRefreshtoken,
|
|
177
176
|
Module,
|
|
178
177
|
components,
|
|
179
178
|
expandexp,
|
package/src/login.ts
CHANGED
|
@@ -84,6 +84,7 @@ class Login {
|
|
|
84
84
|
|
|
85
85
|
getToken () {
|
|
86
86
|
return this.getData('token')
|
|
87
|
+
// return lsProxy.getItem('token') as string
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
setToken (value: string) {
|
|
@@ -108,6 +109,7 @@ class Login {
|
|
|
108
109
|
|
|
109
110
|
getRefreshToken () {
|
|
110
111
|
return this.getData('refreshtoken')
|
|
112
|
+
// return lsProxy.getItem('refreshtoken') as string
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
setRefreshToken (value: string) {
|
|
@@ -118,13 +120,25 @@ class Login {
|
|
|
118
120
|
this.removeData('refreshtoken')
|
|
119
121
|
}
|
|
120
122
|
|
|
121
|
-
|
|
123
|
+
updateToken () {
|
|
124
|
+
// 如果是产品运营中心 则不走刷新token流程
|
|
125
|
+
if (this.checkLogin() && this.getRole() === 'center') {
|
|
126
|
+
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
|
|
127
|
+
return false
|
|
128
|
+
}
|
|
129
|
+
const token = this.getToken()
|
|
130
|
+
const refreshtoken = this.getRefreshToken()
|
|
131
|
+
const sendToken = this.checkLoginByToken(token) ? token : refreshtoken
|
|
122
132
|
return axios.get('/api/auth/refreshtoken', {
|
|
123
133
|
params: {
|
|
124
|
-
refreshtoken:
|
|
134
|
+
refreshtoken: sendToken
|
|
125
135
|
},
|
|
126
136
|
isShowLoadding: false,
|
|
127
|
-
isShowErrorMessage: false
|
|
137
|
+
isShowErrorMessage: false,
|
|
138
|
+
isSendToken: false,
|
|
139
|
+
headers: {
|
|
140
|
+
token: sendToken
|
|
141
|
+
}
|
|
128
142
|
}).then((res: any) => {
|
|
129
143
|
// console.log(res)
|
|
130
144
|
const data = res?.data
|
|
@@ -139,19 +153,41 @@ class Login {
|
|
|
139
153
|
private refreshtokenTimer: number | null = null
|
|
140
154
|
|
|
141
155
|
startRefreshtoken () {
|
|
142
|
-
//
|
|
143
|
-
|
|
156
|
+
// 如果是产品运营中心 则不走刷新token流程
|
|
157
|
+
if (this.checkLogin() && this.getRole() === 'center') {
|
|
158
|
+
console.warn('当前登录为产品运营中心用户,不支持自动刷新token。')
|
|
159
|
+
return false
|
|
160
|
+
}
|
|
161
|
+
|
|
144
162
|
this.stopRefreshtoken()
|
|
145
|
-
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
163
|
+
|
|
164
|
+
// 如果有登录 但 refreshtoken 不是完整 token 则10秒后【需要等单点登录走完后才刷新不然会被覆盖】刷新一次取到完整 token
|
|
165
|
+
// 如果有登录 且 refreshtoken 是完整 token 如果剩余时间大于10分钟 则每隔10分钟刷一次 否则过期前15秒更新 token
|
|
166
|
+
// 如果没登录 每隔1分钟走token更新逻辑(如果刚开始没登录 后面才登录【不需要再在登陆后写刷新token逻辑】)
|
|
167
|
+
let time = 0
|
|
168
|
+
if (this.checkLogin()) {
|
|
169
|
+
const user = this.getUserByToken(this.getRefreshToken())
|
|
170
|
+
if (user?.tokenId) {
|
|
171
|
+
time = Number(this.getTokenExpires()) - Date.now() - 1000 * 15
|
|
172
|
+
// 如果剩余时间大于10分钟 则每隔10分钟刷一次
|
|
173
|
+
if (time > 600000) {
|
|
174
|
+
time = 600000
|
|
175
|
+
} else if (time < 0) {
|
|
176
|
+
time = 0
|
|
151
177
|
}
|
|
152
|
-
|
|
153
|
-
|
|
178
|
+
} else {
|
|
179
|
+
time = 10000
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
time = 60000
|
|
154
183
|
}
|
|
184
|
+
// time = 5000
|
|
185
|
+
this.refreshtokenTimer = window.setTimeout(async () => {
|
|
186
|
+
if (this.checkLogin()) {
|
|
187
|
+
await this.updateToken()
|
|
188
|
+
}
|
|
189
|
+
this.startRefreshtoken()
|
|
190
|
+
}, time)
|
|
155
191
|
}
|
|
156
192
|
|
|
157
193
|
private stopRefreshtoken () {
|
|
@@ -185,11 +221,20 @@ class Login {
|
|
|
185
221
|
}
|
|
186
222
|
|
|
187
223
|
setUserByToken (token: string) {
|
|
224
|
+
const user = this.getUserByToken(token)
|
|
225
|
+
if (user) {
|
|
226
|
+
this.setUser(user)
|
|
227
|
+
} else {
|
|
228
|
+
this.removeUser()
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
getUserByToken (token: string) {
|
|
188
233
|
const jwtInfo = this.jwtDecode(token)
|
|
189
234
|
if (jwtInfo && jwtInfo.LoginUser) {
|
|
190
|
-
|
|
235
|
+
return jwtInfo.LoginUser
|
|
191
236
|
} else {
|
|
192
|
-
|
|
237
|
+
return null
|
|
193
238
|
}
|
|
194
239
|
}
|
|
195
240
|
|
|
@@ -280,7 +325,7 @@ class Login {
|
|
|
280
325
|
// 查询token所属登录角色
|
|
281
326
|
// tenant: 普通租户登录 默认
|
|
282
327
|
// center: 产品运营中心登录 单点登录时只带 token 没带 refreshtoken 和 tokenexpires
|
|
283
|
-
|
|
328
|
+
getRoleByToken (token?: string) {
|
|
284
329
|
let loginRole: 'center' | 'tenant' = 'tenant' // center | tenant
|
|
285
330
|
if (token) {
|
|
286
331
|
const jwtInfo = this.jwtDecode(token)
|
|
@@ -292,19 +337,23 @@ class Login {
|
|
|
292
337
|
return loginRole
|
|
293
338
|
}
|
|
294
339
|
|
|
340
|
+
getRole () {
|
|
341
|
+
return this.getRoleByToken(this.getToken())
|
|
342
|
+
}
|
|
343
|
+
|
|
295
344
|
// 检测当前用户是否登录状态
|
|
296
345
|
checkLogin () {
|
|
297
346
|
let haslogged = false
|
|
298
347
|
const token = this.getToken()
|
|
299
348
|
if (token) {
|
|
300
|
-
if (this.
|
|
301
|
-
haslogged = this.
|
|
349
|
+
if (this.getRole() === 'center') {
|
|
350
|
+
haslogged = this.checkLoginByToken(token)
|
|
302
351
|
} else {
|
|
303
352
|
const refreshtoken = this.getRefreshToken()
|
|
304
353
|
const tokenexpires = this.getTokenExpires()
|
|
305
354
|
const now = Date.now()
|
|
306
355
|
if (token && refreshtoken && tokenexpires && Number(tokenexpires) > now) {
|
|
307
|
-
haslogged = this.
|
|
356
|
+
haslogged = this.checkLoginByToken(token)
|
|
308
357
|
}
|
|
309
358
|
}
|
|
310
359
|
}
|
|
@@ -312,7 +361,7 @@ class Login {
|
|
|
312
361
|
}
|
|
313
362
|
|
|
314
363
|
// 检测token是否过期
|
|
315
|
-
|
|
364
|
+
checkLoginByToken (token?: string) {
|
|
316
365
|
let haslogged = false
|
|
317
366
|
if (token) {
|
|
318
367
|
const now = Date.now()
|
|
@@ -418,9 +467,9 @@ class Login {
|
|
|
418
467
|
const envname = query.envname
|
|
419
468
|
const context = query.context
|
|
420
469
|
|
|
421
|
-
if (this.
|
|
470
|
+
if (this.checkLoginByToken(token)) {
|
|
422
471
|
let isneedlogin = true // 是否需要走单点登录流程
|
|
423
|
-
const loginRole = this.
|
|
472
|
+
const loginRole = this.getRoleByToken(token)
|
|
424
473
|
|
|
425
474
|
if (loginRole === 'center') {
|
|
426
475
|
// 如果本地已经登录 且 query 登录参数与本地一致 说明是刚登录没多久【token也没刷新过】 视为已经登录 不需再走单点登录流程
|
|
@@ -449,6 +498,18 @@ class Login {
|
|
|
449
498
|
// web 端有传 app没传 需要做兼容
|
|
450
499
|
context && lsProxy.setItem('context', decodeURIComponent(context))
|
|
451
500
|
|
|
501
|
+
// 单点登录写入 token 之后 换取完整的 refreshtoken
|
|
502
|
+
try {
|
|
503
|
+
if (this.checkLogin()) {
|
|
504
|
+
const user = this.getUserByToken(this.getRefreshToken())
|
|
505
|
+
if (!user?.tokenId) {
|
|
506
|
+
this.updateToken()
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
} catch (err) {
|
|
510
|
+
console.error(err)
|
|
511
|
+
}
|
|
512
|
+
|
|
452
513
|
// 这里兼容报错
|
|
453
514
|
await this.getAndSetTenant()
|
|
454
515
|
await this.getAndSetUserInfo()
|