114 lines
3.1 KiB
Plaintext
114 lines
3.1 KiB
Plaintext
//定义一个大写的State类型
|
|
import { IUser, IUserInfo } from "@/types/user.uts"
|
|
export type State = {
|
|
uid : number
|
|
tokens : ITokens | null
|
|
info : IUserInfo | null
|
|
profile : UTSJSONObject | null
|
|
// 如有需要,可增加更多属性
|
|
}
|
|
|
|
export type ITokens = {
|
|
accessToken : string | null
|
|
accessExpired : number | null
|
|
refreshToken : string | null
|
|
refreshExpired : number | null
|
|
}
|
|
|
|
// 实例化为state
|
|
const userState = reactive({
|
|
uid: 0,
|
|
tokens: null,
|
|
info: null,
|
|
profile: null
|
|
} as State)
|
|
|
|
export const isLoggedIn = computed(() => {
|
|
const tokens = getUserToken()
|
|
if (tokens == null) return false
|
|
const { accessToken, accessExpired } = tokens
|
|
return accessToken != null && accessExpired != null && accessExpired > Date.now()
|
|
})
|
|
|
|
export const setUserToken = (accessToken : string, accessExpired : number | null, refreshToken : string | null, refreshExpired : number | null) : void => {
|
|
userState.tokens = {
|
|
accessToken: accessToken,
|
|
accessExpired: accessExpired ?? 0,
|
|
refreshToken: refreshToken ?? userState.tokens?.refreshToken ?? null,
|
|
refreshExpired: refreshExpired ?? userState.tokens?.refreshExpired ?? 0
|
|
} as ITokens
|
|
|
|
uni.setStorageSync('user_tokens', JSON.stringify(userState.tokens))
|
|
}
|
|
export const getUserToken = function () : ITokens | null {
|
|
try {
|
|
if (userState.tokens == null) {
|
|
const storageValue = uni.getStorageSync('user_tokens')
|
|
// 增加空字符串判断
|
|
if (storageValue != null && storageValue.toString().length > 0) {
|
|
// #ifndef APP
|
|
const localTokens : string = storageValue.toString()
|
|
const objcet = JSON.parse(localTokens) as ITokens
|
|
// #endif
|
|
// #ifdef APP
|
|
const localToken = JSON.parseObject(storageValue.toString())
|
|
const objcet = localToken?.parse<ITokens>()
|
|
// #endif
|
|
userState.tokens = objcet
|
|
}
|
|
}
|
|
if (userState.tokens != null && userState.tokens.accessToken != null) {
|
|
return userState.tokens
|
|
}
|
|
} catch (e) {
|
|
// 建议清除无效的存储,避免下次继续报错
|
|
uni.removeStorageSync('user_tokens')
|
|
return null
|
|
}
|
|
return null
|
|
}
|
|
export const clearToken = () => {
|
|
userState.tokens = null;
|
|
uni.removeStorageSync('user_tokens')
|
|
}
|
|
|
|
export const getUserInfo = function () : IUserInfo | null {
|
|
if (userState.info == null) {
|
|
const storageValue = uni.getStorageSync('user_info')
|
|
const localUserInfo : string = storageValue != null ? storageValue.toString() : ""
|
|
if (localUserInfo.length > 0) {
|
|
const objcet = JSON.parseObject(localUserInfo)
|
|
userState.info = objcet?.parse<IUserInfo>()
|
|
userState.uid = userState.info?.uid ?? 0
|
|
}
|
|
}
|
|
if (userState.info != null) {
|
|
return userState.info
|
|
}
|
|
return null
|
|
}
|
|
|
|
export const setUserInfo = (info : IUserInfo | null) => {
|
|
userState.info = info
|
|
if (info != null) {
|
|
uni.setStorageSync('user_info', JSON.stringify(info))
|
|
} else {
|
|
uni.removeStorageSync('user_info')
|
|
}
|
|
}
|
|
|
|
export const initStore = () => {
|
|
try {
|
|
const tokens = getUserToken()
|
|
} catch (e) {
|
|
console.error('解析用户Token失败', e)
|
|
}
|
|
try {
|
|
const info = getUserInfo()
|
|
} catch (e) {
|
|
console.error('解析用户信息失败', e)
|
|
}
|
|
|
|
}
|
|
|
|
export default userState |