feat: 添加 token 刷新功能及相关类型定义
- 在 typings.d.ts 中新增 IUserToken 接口 - 在 login.ts 中添加 refreshToken 函数以支持 token 刷新 - 在 types/login.ts 中新增 IUserTokenVo 接口 - 更新 http.ts 以处理 token 刷新逻辑 - 修改 interceptor.ts 以使用新的 token 类型 - 在 user.ts 中整合 token 状态管理
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import type { IUserInfoVo } from '@/api/types/login'
|
||||
import type { IUserInfoVo, IUserLogin, IUserTokenVo } from '@/api/types/login'
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import {
|
||||
getUserInfo as _getUserInfo,
|
||||
login as _login,
|
||||
logout as _logout,
|
||||
refreshToken as _refreshToken,
|
||||
wxLogin as _wxLogin,
|
||||
getWxCode,
|
||||
} from '@/api/login'
|
||||
@@ -15,7 +16,12 @@ const userInfoState: IUserInfoVo = {
|
||||
id: 0,
|
||||
username: '',
|
||||
avatar: '/static/images/default-avatar.png',
|
||||
}
|
||||
|
||||
const userTokenState: IUserTokenVo = {
|
||||
token: '',
|
||||
refreshToken: '',
|
||||
refreshExpire: 0,
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore(
|
||||
@@ -23,6 +29,8 @@ export const useUserStore = defineStore(
|
||||
() => {
|
||||
// 定义用户信息
|
||||
const userInfo = ref<IUserInfoVo>({ ...userInfoState })
|
||||
const userToken = ref<IUserTokenVo>({ ...userTokenState })
|
||||
|
||||
// 设置用户信息
|
||||
const setUserInfo = (val: IUserInfoVo) => {
|
||||
console.log('设置用户信息', val)
|
||||
@@ -43,9 +51,23 @@ export const useUserStore = defineStore(
|
||||
// 删除用户信息
|
||||
const removeUserInfo = () => {
|
||||
userInfo.value = { ...userInfoState }
|
||||
userToken.value = { ...userTokenState }
|
||||
uni.removeStorageSync('userInfo')
|
||||
uni.removeStorageSync('token')
|
||||
uni.removeStorageSync('refreshToken')
|
||||
}
|
||||
|
||||
/**
|
||||
* 存储token,非导出
|
||||
*/
|
||||
const setToken = (tokenBody: IUserLogin) => {
|
||||
userToken.value.token = tokenBody.token
|
||||
userToken.value.refreshToken = tokenBody.refreshToken
|
||||
userToken.value.refreshExpire = tokenBody.refreshExpire
|
||||
uni.setStorageSync('token', tokenBody.token)
|
||||
uni.setStorageSync('refreshToken', tokenBody.refreshToken)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*/
|
||||
@@ -54,7 +76,6 @@ export const useUserStore = defineStore(
|
||||
const userInfo = res.data
|
||||
setUserInfo(userInfo)
|
||||
uni.setStorageSync('userInfo', userInfo)
|
||||
uni.setStorageSync('token', userInfo.token)
|
||||
// TODO 这里可以增加获取用户路由的方法 根据用户的角色动态生成路由
|
||||
return res
|
||||
}
|
||||
@@ -72,6 +93,18 @@ export const useUserStore = defineStore(
|
||||
const res = await _login(credentials)
|
||||
console.log('登录信息', res)
|
||||
toast.success('登录成功')
|
||||
// 这里设置token 和 refreshToken
|
||||
setToken(res.data)
|
||||
await getUserInfo()
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新token
|
||||
*/
|
||||
const refreshToken = async () => {
|
||||
const res = await _refreshToken(userToken.value.refreshToken)
|
||||
setToken(res.data)
|
||||
await getUserInfo()
|
||||
return res
|
||||
}
|
||||
@@ -98,11 +131,13 @@ export const useUserStore = defineStore(
|
||||
|
||||
return {
|
||||
userInfo,
|
||||
userToken,
|
||||
login,
|
||||
wxLogin,
|
||||
getUserInfo,
|
||||
setUserAvatar,
|
||||
logout,
|
||||
refreshToken,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user