huangye-parking/miniapp/utils/auth.js
2026-02-28 17:35:49 +08:00

97 lines
1.7 KiB
JavaScript

/**
* 登录状态管理
* Token 本地存储、登录态检查、路由守卫
*/
const TOKEN_KEY = 'token'
const USER_INFO_KEY = 'userInfo'
const ROLE_KEY = 'userRole' // 'user' | 'merchant'
/**
* 保存登录信息
* @param {string} token - JWT Token
* @param {Object} userInfo - 用户信息
*/
export function setLoginInfo(token, userInfo) {
uni.setStorageSync(TOKEN_KEY, token)
uni.setStorageSync(USER_INFO_KEY, JSON.stringify(userInfo))
}
/**
* 获取 Token
* @returns {string|null}
*/
export function getToken() {
return uni.getStorageSync(TOKEN_KEY) || null
}
/**
* 获取用户信息
* @returns {Object|null}
*/
export function getUserInfo() {
const info = uni.getStorageSync(USER_INFO_KEY)
if (!info) return null
try {
return JSON.parse(info)
} catch {
return null
}
}
/**
* 检查是否已登录
* @returns {boolean}
*/
export function isLoggedIn() {
return !!getToken()
}
/**
* 设置用户角色
* @param {'user'|'merchant'} role
*/
export function setRole(role) {
uni.setStorageSync(ROLE_KEY, role)
}
/**
* 获取用户角色
* @returns {'user'|'merchant'|null}
*/
export function getRole() {
return uni.getStorageSync(ROLE_KEY) || null
}
/**
* 清除登录状态(退出登录)
*/
export function clearAuth() {
uni.removeStorageSync(TOKEN_KEY)
uni.removeStorageSync(USER_INFO_KEY)
uni.removeStorageSync(ROLE_KEY)
}
/**
* 登录态检查,未登录则跳转登录页
* @returns {boolean} 是否已登录
*/
export function checkLogin() {
if (!isLoggedIn()) {
uni.navigateTo({ url: '/pages/login/index' })
return false
}
return true
}
export default {
setLoginInfo,
getToken,
getUserInfo,
isLoggedIn,
setRole,
getRole,
clearAuth,
checkLogin
}