Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mmc-stl-vue2
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
mmc-stl-vue2
Commits
e55e1610
提交
e55e1610
authored
8月 20, 2024
作者:
翁进城
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: 登录失效问题, 增加token刷新
上级
8f10578a
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
65 行增加
和
3 行删除
+65
-3
App.vue
iframe/src/App.vue
+1
-0
request.js
src/components/MMCFlightControlCenter/api/request.js
+64
-3
没有找到文件。
iframe/src/App.vue
浏览文件 @
e55e1610
...
...
@@ -10,6 +10,7 @@
:useTimedTask=
"useTimedTask"
:useAirway=
"useAirway"
@
tokenInvalid=
"dispatchEvent('tokenInvalid')"
@
refreshToken=
"dispatchEvent('refreshToken', $event)"
@
uavChange=
"dispatchEvent('uavChange', $event)"
@
taskAdd=
"dispatchEvent('taskAdd', $event)"
@
taskBatchAdd=
"dispatchEvent('taskBatchAdd', $event)"
...
...
src/components/MMCFlightControlCenter/api/request.js
浏览文件 @
e55e1610
import
axios
from
"axios"
;
import
Vue
from
"vue"
;
import
{
resetMessage
}
from
"./message"
;
import
router
from
"../router"
;
import
store
from
"../store"
;
import
{
MessageBox
}
from
"element-ui"
;
// 请求队列
let
requestList
=
[];
// 是否正在刷新中
let
isRefreshToken
=
false
;
const
$axios
=
axios
.
create
({
// baseURL: process.env.VUE_APP_BASE_API_TG
...
...
@@ -45,6 +49,7 @@ $axios.interceptors.response.use(
console
.
log
(
"回应参数..."
,
response
);
const
status
=
response
.
status
;
const
res
=
response
.
data
;
const
config
=
response
.
config
;
// 请求成功返回response.data
if
((
status
>=
200
&&
status
<
300
)
||
status
===
304
)
{
switch
(
res
.
code
)
{
...
...
@@ -52,7 +57,54 @@ $axios.interceptors.response.use(
return
Promise
.
resolve
(
res
);
case
401
:
window
.
$mmc
.
app
.
$emit
(
'tokenInvalid'
);
// 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了
if
(
!
isRefreshToken
)
{
isRefreshToken
=
true
;
// 1. 如果获取不到刷新令牌,则只能执行登出操作
if
(
!
store
.
state
.
token
)
{
return
handleAuthorized
();
}
// 2. 进行刷新访问令牌
try
{
return
new
Promise
((
resolve
,
reject
)
=>
{
window
.
$mmc
.
app
.
$emit
(
"refreshToken"
,
{
callback
(
data
)
{
isRefreshToken
=
false
;
if
(
data
.
code
===
0
)
{
const
token
=
data
.
token
;
console
.
log
(
'store'
,
store
);
window
.
$mmc
.
app
.
$store
.
commit
(
'MMCFlightControlCenter/setState'
,
{
key
:
'token'
,
value
:
token
})
config
.
headers
.
Authorization
=
"Bearer "
+
token
;
requestList
.
forEach
((
cb
)
=>
{
cb
();
});
requestList
=
[];
resolve
(
$axios
(
config
));
}
else
{
handleAuthorized
();
}
},
});
});
}
catch
(
e
)
{
}
finally
{
requestList
=
[];
}
}
else
{
// 添加到队列,等待刷新获取到新的令牌
return
new
Promise
((
resolve
)
=>
{
requestList
.
push
(()
=>
{
const
token
=
store
.
state
.
token
;
config
.
headers
.
Authorization
=
"Bearer "
+
token
;
// 让每个请求携带自定义token 请根据实际情况自行修改
resolve
(
$axios
(
config
));
});
});
}
break
;
default
:
...
...
@@ -100,3 +152,12 @@ $axios.interceptors.response.use(
);
export
default
$axios
;
function
handleAuthorized
()
{
MessageBox
.
alert
(
"登录超时,请重新登录!"
,
"提示"
,
{
confirmButtonText
:
"重新登录"
,
callback
:
(
action
)
=>
{
window
.
$mmc
.
app
.
$emit
(
"tokenInvalid"
);
},
});
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论