Files

89 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

/**
* 静默登录 - 重新获取 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) => {
2026-05-08 13:28:09 +08:00
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;
}