Files
YwxAppThink/addon/wxchat/YwxMakeFriends/stores/user.uts
T

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