Files
yunzerwebsiteallinone/uniapp/utils/auth.js
T
2026-09-19 21:44:04 +08:00

146 lines
3.9 KiB
JavaScript

const TOKEN_KEY = 'app_token'
const USER_KEY = 'app_user'
const TENANT_KEY = 'app_tenant_name'
const TID_KEY = 'app_tid'
const REFRESH_KEY = 'app_refresh_token'
const SID_KEY = 'app_sid'
/** 是否启用统一认证:.env 中配置 VITE_AUTH_MODE=sso */
export function isSSOEnabled() {
try {
return (typeof import.meta !== 'undefined' && import.meta.env && import.meta.env.VITE_AUTH_MODE) === 'sso'
} catch (e) {
return false
}
}
/** 统一认证:保存令牌与会话信息 */
export function setAuthTokens(data = {}) {
if (data.access_token) setToken(data.access_token)
if (data.refresh_token) uni.setStorageSync(REFRESH_KEY, data.refresh_token)
if (data.sid) uni.setStorageSync(SID_KEY, data.sid)
}
export function getRefreshToken() {
return uni.getStorageSync(REFRESH_KEY) || ''
}
export function getSid() {
return uni.getStorageSync(SID_KEY) || ''
}
export function setTid(tid) {
uni.setStorageSync(TID_KEY, tid || '')
}
export function getTid() {
return Number(uni.getStorageSync(TID_KEY) || 0)
}
const REMEMBER_KEY = 'app_remember_me'
const REMEMBER_TENANT_KEY = 'app_remember_tenant'
const REMEMBER_ACCOUNT_KEY = 'app_remember_account'
const REMEMBER_PASSWORD_KEY = 'app_remember_password'
export function setToken(token) {
uni.setStorageSync(TOKEN_KEY, token || '')
}
export function getToken() {
return uni.getStorageSync(TOKEN_KEY) || ''
}
export function setUser(user) {
uni.setStorageSync(USER_KEY, user || null)
}
export function getUser() {
return uni.getStorageSync(USER_KEY) || null
}
export function setTenantName(name) {
uni.setStorageSync(TENANT_KEY, name || '')
}
export function getTenantName() {
return uni.getStorageSync(TENANT_KEY) || ''
}
export function isLoggedIn() {
return !!getToken()
}
export function logout() {
uni.removeStorageSync(TOKEN_KEY)
uni.removeStorageSync(USER_KEY)
uni.removeStorageSync(REFRESH_KEY)
uni.removeStorageSync(SID_KEY)
}
/** 是否开启记住账号登录信息 */
export function isRememberLogin() {
return uni.getStorageSync(REMEMBER_KEY) === '1'
}
/**
* 读取记住的账号登录信息。
* 安全说明:不再保存/回填密码,仅记住租户名与账号。
*/
export function getRememberLogin() {
if (!isRememberLogin()) {
return { rememberMe: false, tenantName: '', account: '' }
}
return {
rememberMe: true,
tenantName: uni.getStorageSync(REMEMBER_TENANT_KEY) || '',
account: uni.getStorageSync(REMEMBER_ACCOUNT_KEY) || ''
}
}
/** 保存账号登录信息(租户、账号;不含密码) */
export function saveRememberLogin({ tenantName = '', account = '' } = {}) {
uni.setStorageSync(REMEMBER_KEY, '1')
uni.setStorageSync(REMEMBER_TENANT_KEY, tenantName)
uni.setStorageSync(REMEMBER_ACCOUNT_KEY, account)
// 历史版本可能已落盘明文密码,这里一并清理
uni.removeStorageSync(REMEMBER_PASSWORD_KEY)
}
/** 清除记住的账号登录信息 */
export function clearRememberLogin() {
uni.removeStorageSync(REMEMBER_KEY)
uni.removeStorageSync(REMEMBER_TENANT_KEY)
uni.removeStorageSync(REMEMBER_ACCOUNT_KEY)
uni.removeStorageSync(REMEMBER_PASSWORD_KEY)
}
/**
* 登录成功写入 token 与用户信息
* @param {{ token?: string, user?: object, nickname?: string, phone?: string, account?: string, name?: string, avatar?: string, id?: number|string }} payload
*/
export function loginSuccess(payload = {}) {
const token = payload.token || payload.access_token || ''
if (token) {
setToken(token)
}
const rawUser = payload.user || payload
const user = {
id: rawUser.id,
account: rawUser.account || '',
name: rawUser.name || '',
nickname: rawUser.nickname || rawUser.name || rawUser.account || '云泽用户',
avatar: rawUser.avatar || '',
phone: rawUser.phone || payload.phone || '',
tid: rawUser.tid,
rid: rawUser.rid,
role_name: rawUser.role_name || '',
...rawUser
}
// 保证 nickname 可用
if (!user.nickname) {
user.nickname = user.name || user.account || '云泽用户'
}
setUser(user)
return user
}