Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
da81fbf2
提交
da81fbf2
authored
8月 22, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(auth): 关闭 refresh_token 刷新问题
上级
2f6d234a
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
62 行增加
和
25 行删除
+62
-25
login.js
src/api/common/login.js
+8
-3
user.js
src/store/modules/user.js
+14
-4
version.js
src/store/modules/version.js
+2
-2
auth.js
src/utils/auth.js
+15
-0
request.js
src/utils/request.js
+22
-15
vite.config.js
vite.config.js
+1
-1
没有找到文件。
src/api/common/login.js
浏览文件 @
da81fbf2
...
...
@@ -73,9 +73,14 @@ export function logout() {
// 刷新 token 有效期
export
function
refreshToken
(
)
{
export
function
refreshToken
API
(
refreshToken
)
{
return
request
({
url
:
'/auth/refresh'
,
method
:
'post'
url
:
'/auth/refreshToken'
,
method
:
'post'
,
headers
:
{
isToken
:
false
,
// 本次请求无需设置在请求拦截器设置请求头上的 token(容易把过期的 token 覆盖到 Authorization 了,而这次 Authorization 我带的是刷新的 refreshToken 给后端)
'Authorization'
:
`Bearer `
+
refreshToken
},
})
}
src/store/modules/user.js
浏览文件 @
da81fbf2
import
{
login
,
fsLogin
,
getInfo
,
qcLogin
}
from
'@/api'
import
{
getToken
,
setToken
,
removeToken
}
from
'@/utils/auth'
import
{
login
,
fsLogin
,
getInfo
,
qcLogin
,
refreshTokenAPI
}
from
'@/api'
import
{
getToken
,
setToken
,
removeToken
,
getRefreshToken
,
setRefreshToken
,
removeRefreshToken
}
from
'@/utils/auth'
import
{
isHttp
,
isEmpty
}
from
"@/utils/validate"
import
defAva
from
'@/assets/images/profile.jpg'
...
...
@@ -8,6 +9,7 @@ export default defineStore(
{
state
:
()
=>
({
token
:
getToken
(),
refreshToken
:
getRefreshToken
(),
id
:
''
,
name
:
''
,
avatar
:
''
,
...
...
@@ -27,7 +29,9 @@ export default defineStore(
const
{
username
,
password
}
=
data
login
({
username
,
password
}).
then
(
res
=>
{
this
.
token
=
res
.
data
.
access_token
this
.
refreshToken
=
res
.
data
.
refresh_token
setToken
(
res
.
data
.
access_token
)
setRefreshToken
(
res
.
data
.
refresh_token
)
resolve
()
}).
catch
(
error
=>
{
reject
(
error
)
...
...
@@ -92,7 +96,13 @@ export default defineStore(
// reject(error)
// })
})
}
},
// 刷新token
async
refreshTokenFn
()
{
const
res
=
await
refreshTokenAPI
(
this
.
refreshToken
)
this
.
token
=
res
.
data
.
access_token
setToken
(
res
.
data
.
access_token
)
},
},
getters
:
{
/**
...
...
@@ -109,7 +119,7 @@ export default defineStore(
empId
:
state
.
userInfo
.
userId
,
// 员工 id
empNo
:
state
.
userInfo
.
userName
,
// 员工工号
empName
:
state
.
userInfo
.
nickName
,
// 员工昵称名字
}
}
}
}
})
...
...
src/store/modules/version.js
浏览文件 @
da81fbf2
...
...
@@ -14,8 +14,8 @@ export default defineStore(
getVersion
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
getVersionAPI
().
then
(
res
=>
{
this
.
versionChange
=
!
(
this
.
version
===
res
.
data
[
0
].
version
)
this
.
version
=
res
.
data
[
0
].
version
this
.
versionChange
=
!
(
this
.
version
===
res
.
data
[
0
]
?
.
version
)
this
.
version
=
res
.
data
[
0
]
?
.
version
// 组织版本内容数据
this
.
versionList
=
res
.
data
[
0
]?.
changes
.
map
(
o
=>
{
return
{
...
...
src/utils/auth.js
浏览文件 @
da81fbf2
import
Cookies
from
'js-cookie'
const
TokenKey
=
'Admin-Token'
const
refreshToken
=
'admin-t'
export
function
getToken
()
{
return
Cookies
.
get
(
TokenKey
)
...
...
@@ -13,3 +14,17 @@ export function setToken(token) {
export
function
removeToken
()
{
return
Cookies
.
remove
(
TokenKey
)
}
export
function
getRefreshToken
()
{
return
Cookies
.
get
(
refreshToken
)
}
export
function
setRefreshToken
(
token
)
{
return
Cookies
.
set
(
refreshToken
,
token
)
}
export
function
removeRefreshToken
()
{
return
Cookies
.
remove
(
refreshToken
)
}
src/utils/request.js
浏览文件 @
da81fbf2
...
...
@@ -6,7 +6,7 @@ import { tansParams, blobValidate } from '@/utils/ruoyi'
import
cache
from
'@/plugins/cache'
import
{
saveAs
}
from
'file-saver'
import
useUserStore
from
'@/store/modules/user'
import
{
fsClientAuth
,
refreshToken
}
from
'@/api'
import
{
fsClientAuth
}
from
'@/api'
let
downloadLoadingInstance
;
// 是否显示重新登录
...
...
@@ -81,7 +81,6 @@ service.interceptors.request.use(config => {
// 响应拦截器
service
.
interceptors
.
response
.
use
(
async
res
=>
{
// 未设置状态码则默认成功状态
const
code
=
res
.
data
.
code
||
200
;
// 获取错误信息
...
...
@@ -102,21 +101,29 @@ service.interceptors.response.use(async res => {
return
service
(
res
.
config
)
}
// PC/移动端刷新 token 有效期
// await
refreshToke
n()
// await
useUserStore().refreshTokenF
n()
// return service(res.config)
if
(
!
isRelogin
.
show
)
{
isRelogin
.
show
=
true
;
ElMessageBox
.
confirm
(
'登录状态已过期,您可以继续留在该页面,或者重新登录'
,
'系统提示'
,
{
confirmButtonText
:
'重新登录'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
isRelogin
.
show
=
false
;
useUserStore
().
logOut
().
then
(()
=>
{
location
.
href
=
'#/login'
;
})
}).
catch
(()
=>
{
isRelogin
.
show
=
false
;
});
}
ElMessageBox
.
confirm
(
'登录状态已过期,您可以继续留在该页面,或者重新登录'
,
'系统提示'
,
{
confirmButtonText
:
'重新登录'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
isRelogin
.
show
=
false
;
useUserStore
().
logOut
().
then
(()
=>
{
location
.
href
=
'#/login'
;
})
}).
catch
(()
=>
{
isRelogin
.
show
=
false
;
});
return
Promise
.
reject
(
'无效的会话,或者会话已过期,请重新登录。'
)
}
else
if
(
code
===
403
)
{
// 如果刷新 refreshToken 接口也报错了,证明需要重新登录
// ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
// isRelogin.show = false;
// useUserStore().logOut().then(() => {
// location.href = '#/login';
// })
// }).catch(() => {
// isRelogin.show = false;
// });
// return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
}
else
if
(
code
===
500
)
{
ElMessage
({
message
:
msg
,
type
:
'error'
})
return
Promise
.
reject
(
new
Error
(
msg
))
...
...
vite.config.js
浏览文件 @
da81fbf2
...
...
@@ -39,7 +39,7 @@ export default defineConfig(({ mode, command }) => {
rewrite
:
(
p
)
=>
p
.
replace
(
/^
\/
ql_local/
,
''
)
},
'/bc_local'
:
{
target
:
'http://192.168.100.1
03
:8180'
,
target
:
'http://192.168.100.1
80
:8180'
,
changeOrigin
:
true
,
rewrite
:
(
p
)
=>
p
.
replace
(
/^
\/
bc_local/
,
''
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论