112 lines
2.4 KiB
JavaScript
112 lines
2.4 KiB
JavaScript
import { clearCache } from './apiCache.js'
|
|
|
|
const TOKEN_KEY = 'user_token'
|
|
|
|
// 获取token
|
|
export function getToken() {
|
|
try {
|
|
return uni.getStorageSync(TOKEN_KEY) || ''
|
|
} catch (err) {
|
|
console.error('获取token失败:', err)
|
|
return ''
|
|
}
|
|
}
|
|
|
|
// 保存token
|
|
export function setToken(token) {
|
|
try {
|
|
if (token && typeof token === 'string') {
|
|
uni.setStorageSync(TOKEN_KEY, token)
|
|
}
|
|
} catch (err) {
|
|
console.error('保存token失败:', err)
|
|
uni.showToast({
|
|
title: '登录状态保存失败',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
}
|
|
|
|
// 删除token
|
|
export function removeToken() {
|
|
try {
|
|
uni.removeStorageSync(TOKEN_KEY)
|
|
} catch (err) {
|
|
console.error('删除token失败:', err)
|
|
}
|
|
}
|
|
|
|
// 判断是否登录
|
|
export function isLogin() {
|
|
const token = getToken()
|
|
return !!token && token.length > 0
|
|
}
|
|
|
|
// 校验登录(未登录跳转)
|
|
export function checkLogin() {
|
|
if (!isLogin()) {
|
|
const pages = getCurrentPages()
|
|
const currentPage = pages[pages.length - 1]
|
|
if (currentPage?.route !== 'pages/login/login') {
|
|
uni.navigateTo({
|
|
url: '/pages/login/login'
|
|
})
|
|
}
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// 退出登录
|
|
export function logout() {
|
|
try {
|
|
// 1. 删除token(保留原有核心逻辑)
|
|
removeToken()
|
|
clearCache()
|
|
// 2. 清空用户信息缓存(解决用户名/头像/签名/邮箱残留)
|
|
uni.removeStorageSync('userName')
|
|
uni.removeStorageSync('userAvatar')
|
|
uni.removeStorageSync('userSignature')
|
|
uni.removeStorageSync('userEmail')
|
|
// 如有其他登录相关缓存,继续补充:
|
|
// uni.removeStorageSync('userInfo')
|
|
|
|
// 3. 重置全局变量(如有)
|
|
if (getApp().globalData?.userInfo) {
|
|
getApp().globalData.userInfo = null
|
|
}
|
|
if (getApp().globalData?.token) {
|
|
getApp().globalData.token = ''
|
|
}
|
|
if (getApp().globalData?.lastToken) {
|
|
getApp().globalData.lastToken = ''
|
|
}
|
|
} catch (err) {
|
|
console.error('清空登录缓存失败:', err)
|
|
uni.showToast({
|
|
title: '清空登录状态失败',
|
|
icon: 'none'
|
|
})
|
|
return // 出错则终止,避免错误跳转
|
|
}
|
|
|
|
// 4. 提示(保留原有)
|
|
uni.showToast({
|
|
title: '已退出登录',
|
|
icon: 'success',
|
|
duration: 1500
|
|
})
|
|
|
|
// 5. 关键修改:用reLaunch替代switchTab,强制重启小程序
|
|
setTimeout(() => {
|
|
uni.reLaunch({
|
|
url: '/pages/login/login', // 直接跳登录页,而非首页
|
|
fail: () => {
|
|
// 兜底:重启失败则直接跳转
|
|
uni.redirectTo({
|
|
url: '/pages/login/login'
|
|
})
|
|
}
|
|
})
|
|
}, 1500)
|
|
} |