Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
corporateCulture-qd
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王立鹏
corporateCulture-qd
Commits
6614a3f4
Commit
6614a3f4
authored
Feb 13, 2026
by
lijiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【需求 20331】 feat: 完成token续签功能、用户信息存到storage里面支持持久化处理,避免重复调登录接口
parent
0ca5c7a1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
78 additions
and
8 deletions
+78
-8
user.ts
src/stores/user.ts
+41
-7
error.ts
src/utils/request/error.ts
+37
-1
No files found.
src/stores/user.ts
View file @
6614a3f4
import
{
defineStore
}
from
'pinia'
import
{
loginByCode
,
loginByEmail
}
from
'@/api/login'
import
{
loginByCode
,
loginByEmail
,
refreshTokenApi
}
from
'@/api/login'
import
type
{
LoginResponseDto
}
from
'@/api/login/types'
/**
* 关于用户的store
*/
export
const
useUserStore
=
defineStore
(
'user'
,
()
=>
{
const
userInfo
=
ref
(
JSON
.
parse
(
session
Storage
.
getItem
(
'userInfo'
)
||
'{}'
)
as
LoginResponseDto
)
//
const token = ref(localStorage.getItem('token') || '')
const
token
=
ref
(
sessionStorage
.
getItem
(
't
oken'
)
||
''
)
const
userInfo
=
ref
(
JSON
.
parse
(
local
Storage
.
getItem
(
'userInfo'
)
||
'{}'
)
as
LoginResponseDto
)
const
token
=
ref
(
localStorage
.
getItem
(
'token'
)
||
''
)
const
refreshToken
=
ref
(
localStorage
.
getItem
(
'refreshT
oken'
)
||
''
)
// 获取用户信息
const
fetchUserInfo
=
async
()
=>
{
// {
...
...
@@ -41,20 +41,54 @@ export const useUserStore = defineStore('user', () => {
})
=>
{
const
{
data
}
=
await
loginByCode
({
code
,
isCodeLogin
,
cutEmail
})
console
.
log
(
data
)
setUserInfoAndToken
(
data
)
}
const
getNewToken
=
async
()
=>
{
const
{
data
}
=
await
refreshTokenApi
(
refreshToken
.
value
)
setUserInfoAndToken
(
data
)
}
const
setUserInfoAndToken
=
async
(
data
:
LoginResponseDto
)
=>
{
setUserInfo
(
data
)
setToken
(
data
.
token
)
setRefreshToken
(
data
.
refreshToken
)
}
const
clearAllUserInfo
=
()
=>
{
userInfo
.
value
=
{}
as
LoginResponseDto
token
.
value
=
''
refreshToken
.
value
=
''
localStorage
.
removeItem
(
'userInfo'
)
localStorage
.
removeItem
(
'token'
)
localStorage
.
removeItem
(
'refreshToken'
)
}
const
setUserInfo
=
(
info
:
LoginResponseDto
)
=>
{
userInfo
.
value
=
info
// session存一份
session
Storage
.
setItem
(
'userInfo'
,
JSON
.
stringify
(
info
))
local
Storage
.
setItem
(
'userInfo'
,
JSON
.
stringify
(
info
))
}
const
setToken
=
(
str
:
string
)
=>
{
token
.
value
=
str
// session存一份
sessionStorage
.
setItem
(
'token'
,
str
)
localStorage
.
setItem
(
'token'
,
str
)
}
const
setRefreshToken
=
(
str
:
string
)
=>
{
refreshToken
.
value
=
str
localStorage
.
setItem
(
'refreshToken'
,
str
)
}
// window.setToken = (str: string) => {
// setToken(str)
// }
return
{
userInfo
,
token
,
fetchUserInfo
,
setUserInfo
,
setToken
,
getUserInfoByCode
}
return
{
userInfo
,
token
,
fetchUserInfo
,
setUserInfo
,
setToken
,
getUserInfoByCode
,
refreshToken
,
getNewToken
,
clearAllUserInfo
,
}
})
src/utils/request/error.ts
View file @
6614a3f4
...
...
@@ -9,7 +9,10 @@ import {
}
from
'./service'
import
type
{
BackendServiceResult
,
RequestServiceError
}
from
'./types'
import
{
showErrorMsg
}
from
'@/utils/toast'
import
type
{
AxiosError
,
AxiosResponse
}
from
'axios'
import
type
{
AxiosError
,
AxiosRequestConfig
,
AxiosResponse
}
from
'axios'
import
service
from
'./index'
import
{
useUserStore
}
from
'@/stores/user'
/**
* 后端逻辑code报错处理
...
...
@@ -94,7 +97,14 @@ export function handleRequestError<T>(axiosError: AxiosError<BackendServiceResul
type
:
'error'
,
duration
:
0
,
})
}
else
if
(
error
.
code
===
401
)
{
// 处理401的
console
.
log
(
error
,
'这里是401么'
,
axiosError
)
// 重新发送一遍请求
// service.request(axiosError.config as AxiosRequestConfig)
return
handleUnAuthorized
(
axiosError
)
}
else
{
console
.
log
(
error
,
axiosError
,
'这里是其他错误么'
)
showErrorMsg
(
error
)
}
// 鉴权错误
...
...
@@ -111,3 +121,29 @@ function useService404() {
// useUserStroe().loginout()
// router.replace('/login')
}
// 处理401的
let
promiseFlashing
:
Promise
<
void
>
|
null
=
null
async
function
handleUnAuthorized
(
axiosError
:
AxiosError
)
{
const
userStore
=
useUserStore
()
if
(
!
promiseFlashing
)
{
promiseFlashing
=
userStore
.
getNewToken
()
}
try
{
// 捕捉这一个错误
await
promiseFlashing
return
service
.
request
(
axiosError
.
config
as
AxiosRequestConfig
)
}
catch
(
e
)
{
console
.
log
(
e
)
ElMessage
({
showClose
:
true
,
message
:
'重新获取token失败,请关闭标签页,重新打开'
,
type
:
'error'
,
duration
:
0
,
})
userStore
.
clearAllUserInfo
()
return
Promise
.
reject
(
e
)
}
finally
{
promiseFlashing
=
null
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment