uni-app 云对象抛出`uni-id-token-expired`、`uni-id-check-token-failed`错误码不触发客户端跳转登录页面
uni-app 云对象抛出uni-id-token-expired
、uni-id-check-token-failed
错误码不触发客户端跳转登录页面
操作步骤:
- 抛出TOKEN_INVALID_TOKEN_EXPIRED错误码就可以跳转
预期结果:
- 可以跳转
实际结果:
- 不跳转
bug描述:
- 云对象抛出
uni-id-token-expired
、uni-id-check-token-failed
错误码,不触发客户端跳转登陆页面
更多关于uni-app 云对象抛出`uni-id-token-expired`、`uni-id-check-token-failed`错误码不触发客户端跳转登录页面的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app
中使用云对象时,如果遇到 uni-id-token-expired
或 uni-id-check-token-failed
错误码,通常表示用户的登录态已经失效或校验失败。这种情况下,通常需要在客户端进行跳转到登录页面的操作。如果这些错误码没有触发客户端跳转登录页面,可能是以下原因导致的:
1. 未正确处理云对象返回的错误
在调用云对象时,需要对返回的错误进行判断和处理。如果未正确处理错误,客户端无法感知到 uni-id-token-expired
或 uni-id-check-token-failed
错误码,也就不会触发跳转登录页面的操作。
解决方案: 在调用云对象的地方,检查返回的错误码,并根据错误码进行相应的处理。
uniCloud.callFunction({
name: 'yourCloudFunctionName',
data: {
// 你的参数
}
}).then(res => {
// 处理成功结果
}).catch(err => {
if (err.code === 'uni-id-token-expired' || err.code === 'uni-id-check-token-failed') {
// 跳转到登录页面
uni.navigateTo({
url: '/pages/login/login'
});
} else {
// 处理其他错误
console.error(err);
}
});
2. 未在云对象中正确抛出错误
在云对象中,如果未正确抛出 uni-id-token-expired
或 uni-id-check-token-failed
错误码,客户端也无法收到相应的错误信息。
解决方案: 在云对象中,确保在检测到登录态失效时,正确抛出相应的错误码。
module.exports = {
async yourMethod() {
try {
// 校验登录态
const result = await uniID.checkToken(event.uniIdToken);
if (result.code) {
throw result; // 如果校验失败,抛出错误
}
// 其他业务逻辑
} catch (error) {
throw error; // 抛出错误
}
}
}
3. 全局错误处理未覆盖云对象调用
如果你在应用中使用了全局错误处理机制,但没有覆盖到云对象调用的错误处理,可能会导致这些错误码未被捕获。
解决方案: 确保全局错误处理机制能够捕获到云对象调用的错误。
uni.onError = function (error) {
if (error.code === 'uni-id-token-expired' || error.code === 'uni-id-check-token-failed') {
// 跳转到登录页面
uni.navigateTo({
url: '/pages/login/login'
});
} else {
// 处理其他错误
console.error(error);
}
};
4. 客户端未监听全局错误事件
如果客户端没有监听全局错误事件,可能会导致无法捕获到云对象抛出的错误。
解决方案: 在客户端监听全局错误事件,并根据错误码进行相应的处理。
uni.$on('uni-id-token-expired', () => {
uni.navigateTo({
url: '/pages/login/login'
});
});
uni.$on('uni-id-check-token-failed', () => {
uni.navigateTo({
url: '/pages/login/login'
});
});