调整 token过期 及 重定向首页问题
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* 静默登录 - 重新获取 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 == 0) {
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user