/** * 静默登录 - 重新获取 token * 完全静默,不会跳转登录页 * @returns {Promise<{success: boolean, token?: string, error?: string}>} */ export function silentLogin() { return new Promise((resolve, reject) => { uni.login({ provider: 'weixin', success: (loginRes) => { console.log('Silent login code:', loginRes.code); // 调用后端接口获取新 token uni.request({ url: 'https://bsh.info.yw.hnzhwlkj.cn/miniapp/login', method: 'POST', data: { code: loginRes.code }, header: { 'content-type': 'application/x-www-form-urlencoded', 'Fdesk-Language': uni.getStorageSync('i18locale') || 'zh', 'Fdesk-Login-Type': 'wechat', 'Fdesk-System-Code': 'wechat' }, success: (res) => { if (res.data.code == 200) { const { token, openid } = res.data.data; // 更新本地存储 uni.setStorageSync('token', token); uni.setStorageSync('openid', openid); console.log('Silent login success, new token obtained'); resolve({ success: true, token }); } else { console.error('Silent login failed:', res.data.msg); // 不跳转登录页,只返回失败状态 resolve({ success: false, error: res.data.msg }); } }, fail: (err) => { console.error('Silent login request failed:', err); // 不跳转登录页,只返回失败状态 resolve({ success: false, error: err.errMsg }); } }); }, fail: (err) => { console.error('uni.login failed:', err); // 不跳转登录页,只返回失败状态 resolve({ success: false, error: err.errMsg }); } }); }); } /** * 清除认证信息并跳转登录页 */ export function clearAuthAndRedirect() { // 清除登录信息 uni.removeStorageSync('token'); uni.removeStorageSync('openid'); uni.removeStorageSync('is_login'); // 跳转到登录页 uni.reLaunch({ url: '/pages/login/index' }); } /** * 检查是否正在登录中(防止并发重复登录) */ let isLoggingIn = false; let loginPromise = null; export function loginOnce() { if (isLoggingIn) { return loginPromise; } isLoggingIn = true; loginPromise = silentLogin().finally(() => { isLoggingIn = false; loginPromise = null; }); return loginPromise; }