Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
EMS
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hejie
EMS
Commits
520c88d8
提交
520c88d8
authored
5月 06, 2025
作者:
詹银鑫
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:
🚀
更新token
上级
8ea6f114
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
85 行增加
和
10 行删除
+85
-10
settings.json
.vscode/settings.json
+1
-1
user.ts
src/api/user.ts
+5
-1
user.ts
src/store/modules/user.ts
+12
-1
auth.ts
src/utils/auth.ts
+2
-0
index.ts
src/utils/http/index.ts
+58
-3
index.vue
src/views/login/index.vue
+5
-2
vite.config.ts
vite.config.ts
+2
-2
没有找到文件。
.vscode/settings.json
浏览文件 @
520c88d8
...
...
@@ -7,7 +7,7 @@
"editor.tabSize"
:
2
,
"editor.formatOnPaste"
:
true
,
"editor.guides.bracketPairs"
:
"active"
,
"files.autoSave"
:
"
afterDelay
"
,
"files.autoSave"
:
"
off
"
,
"git.confirmSync"
:
false
,
"workbench.startupEditor"
:
"newUntitledFile"
,
"editor.suggestSelection"
:
"first"
,
...
...
src/api/user.ts
浏览文件 @
520c88d8
...
...
@@ -27,6 +27,8 @@ export type UserResult = {
export
type
RefreshTokenResult
=
{
success
:
boolean
;
data
:
{
/** `token` */
jwt
?:
string
;
/** `token` */
accessToken
:
string
;
/** 用于调用刷新`accessToken`的接口时所需的`token` */
...
...
@@ -79,7 +81,9 @@ export const getLogin = (data?: object) => {
/** 刷新`token` */
export
const
refreshTokenApi
=
(
data
?:
object
)
=>
{
return
http
.
request
<
RefreshTokenResult
>
(
"post"
,
"/refresh-token"
,
{
data
});
return
http
.
request
<
RefreshTokenResult
>
(
"post"
,
"/api/auth/refresh-token"
,
{
data
});
};
/** 账户设置-个人信息 */
...
...
src/store/modules/user.ts
浏览文件 @
520c88d8
...
...
@@ -14,7 +14,13 @@ import {
refreshTokenApi
}
from
"@/api/user"
;
import
{
useMultiTagsStoreHook
}
from
"./multiTags"
;
import
{
type
DataInfo
,
setToken
,
removeToken
,
userKey
}
from
"@/utils/auth"
;
import
{
type
DataInfo
,
setToken
,
removeToken
,
userKey
,
getToken
}
from
"@/utils/auth"
;
export
const
useUserStore
=
defineStore
(
"pure-user"
,
{
state
:
():
userType
=>
({
...
...
@@ -106,7 +112,12 @@ export const useUserStore = defineStore("pure-user", {
refreshTokenApi
(
data
)
.
then
(
data
=>
{
if
(
data
)
{
if
(
data
.
data
.
jwt
)
{
data
.
data
.
accessToken
=
data
.
data
.
jwt
;
}
setToken
(
data
.
data
);
console
.
log
(
"data"
,
data
.
data
);
console
.
log
(
getToken
());
resolve
(
data
);
}
})
...
...
src/utils/auth.ts
浏览文件 @
520c88d8
...
...
@@ -19,6 +19,8 @@ export interface DataInfo<T> {
roles
?:
Array
<
string
>
;
/** 当前登录用户的按钮级别权限 */
permissions
?:
Array
<
string
>
;
/** 用于调用刷新accessToken的接口时所需的token */
jwt
?:
string
;
}
export
const
userKey
=
"user-info"
;
...
...
src/utils/http/index.ts
浏览文件 @
520c88d8
...
...
@@ -52,7 +52,6 @@ class PureHttp {
private
static
retryOriginalRequest
(
config
:
PureHttpRequestConfig
)
{
return
new
Promise
(
resolve
=>
{
PureHttp
.
requests
.
push
((
token
:
string
)
=>
{
debugger
;
config
.
headers
[
"Authorization"
]
=
formatToken
(
token
);
resolve
(
config
);
});
...
...
@@ -74,16 +73,16 @@ class PureHttp {
PureHttp
.
initConfig
.
beforeRequestCallback
(
config
);
return
config
;
}
/** 请求白名单,放置一些不需要`token`的接口(通过设置请求白名单,防止`token`过期后再请求造成的死循环问题) */
const
whiteList
=
[
"/refresh-token"
,
"/login"
];
return
whiteList
.
some
(
url
=>
config
.
url
.
endsWith
(
url
))
?
config
:
new
Promise
(
resolve
=>
{
const
data
=
getToken
();
console
.
log
(
4444
,
data
);
if
(
data
)
{
const
now
=
new
Date
().
getTime
();
console
.
log
(
"time"
,
parseInt
(
data
.
expires
)
-
now
);
const
expired
=
parseInt
(
data
.
expires
)
-
now
<=
0
;
if
(
expired
)
{
if
(
!
PureHttp
.
isRefreshing
)
{
...
...
@@ -139,7 +138,63 @@ class PureHttp {
return
response
.
data
;
},
(
error
:
PureHttpError
)
=>
{
// A0301 TOKEN错误 A0201
const
$error
=
error
;
if
((
$error
.
response
.
data
as
{
code
:
string
})?.
code
===
"A0301"
)
{
/** 请求白名单,放置一些不需要`token`的接口(通过设置请求白名单,防止`token`过期后再请求造成的死循环问题) */
console
.
log
(
"error"
,
$error
.
config
);
const
whiteList
=
[
"/refresh-token"
,
"/login"
];
return
whiteList
.
some
(
url
=>
$error
.
config
.
url
.
endsWith
(
url
))
?
$error
.
config
:
new
Promise
(()
=>
{
const
data
=
getToken
();
if
(
data
)
{
if
(
!
PureHttp
.
isRefreshing
)
{
PureHttp
.
isRefreshing
=
true
;
// token过期刷新
useUserStoreHook
()
.
handRefreshToken
({
refreshToken
:
data
.
refreshToken
})
.
then
(
res
=>
{
console
.
log
(
"res"
,
res
);
const
token
=
res
.
data
.
jwt
;
// let refreshToken = res.data.refreshToken;
// console.log("token", token);
$error
.
config
.
headers
[
"Authorization"
]
=
formatToken
(
token
);
// 遍历并执行存储的回调函数
PureHttp
.
requests
.
forEach
(
cb
=>
cb
(
token
));
PureHttp
.
requests
=
[];
// 清空队列
// 重新发起原始请求
return
PureHttp
.
axiosInstance
.
request
(
$error
.
config
);
// PureHttp.retryOriginalRequest($error.config);
// PureHttp.requests.forEach(cb => {
// console.log("cb", cb);
// cb(token);
// });
// PureHttp.requests = [];
})
.
finally
(()
=>
{
PureHttp
.
isRefreshing
=
false
;
});
// }
// resolve());
// } else {
// config.headers["Authorization"] = formatToken(
// data.accessToken
// );
// resolve(config);
// }
// } else {
// resolve(config);
}
}
});
}
$error
.
isCancelRequest
=
Axios
.
isCancel
(
$error
);
// 关闭进度条动画
NProgress
.
done
();
...
...
src/views/login/index.vue
浏览文件 @
520c88d8
...
...
@@ -137,9 +137,11 @@ const onLogin = async (formEl: FormInstance | undefined) => {
.
then
(
res
=>
{
if
(
res
.
status
===
200
||
res
.
success
)
{
// 登录成功,设置 token
console
.
log
(
"res"
,
res
.
data
.
refreshToken
);
setToken
({
accessToken
:
res
.
data
.
jwt
,
refreshToken
:
""
,
// accessToken: res.data.jwt,
accessToken
:
"1213123"
,
refreshToken
:
res
.
data
.
refreshToken
,
expires
:
new
Date
(
Date
.
now
()
+
9999999
*
1000
)
});
console
.
log
(
"getToken"
,
getToken
);
...
...
@@ -150,6 +152,7 @@ const onLogin = async (formEl: FormInstance | undefined) => {
router
.
push
(
getTopMenu
(
true
).
path
)
.
then
(()
=>
{
debugger
;
// 显示登录成功消息
message
(
t
(
"login.pureLoginSuccess"
),
{
type
:
"success"
});
})
...
...
vite.config.ts
浏览文件 @
520c88d8
...
...
@@ -32,9 +32,9 @@ export default ({ mode }: ConfigEnv): UserConfigExport => {
// 旭哥地址
// target: "http://192.168.1.180:5001",
// 服务器地址
target
:
"http://192.168.1.248:5001"
,
//
target: "http://192.168.1.248:5001",
// 熊熊哥地址
// target: "http://192.168.1.194
:5001",
target
:
"http://192.168.0.57
:5001"
,
changeOrigin
:
true
,
rewrite
:
path
=>
path
.
replace
(
/^
\/
api/
,
""
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论