Ionic 5使用cordova-plugin-google-plus登出报错及二次登录无弹窗求助
解决Ionic Google Plus插件重启后登出报错及无登录弹窗问题
我之前也碰到过一模一样的问题!核心原因是APP重启后,插件内部的登录状态没有持久化,导致直接调用logout时,插件认为用户从未登录过,就抛出那个报错;而登录无弹窗则是因为Google的OAuth会话在设备端还保留着,插件默认会尝试静默登录。
下面是具体的解决方案:
1. 修复登出报错:先恢复会话再登出
修改你的logout方法,先通过trySilentLogin验证并恢复当前的登录会话状态,之后再执行登出操作。如果静默登录失败,说明确实没有有效会话,就直接处理这种情况:
async logout() { try { // 重启APP后,先尝试静默登录恢复插件内部的登录状态 await this.googlePlus.trySilentLogin({}); // 状态恢复成功后,执行登出 const logoutRes = await this.googlePlus.logout({}); console.log('登出成功', logoutRes); } catch (err) { // 捕获特定报错,判断是否是未登录状态 if (err.message.includes('Please use login or trySilentLogin before logging out')) { console.log('当前无有效登录会话,无需执行登出'); // 这里可以顺便清理你本地存储的用户信息(比如localStorage里的用户数据) } else { console.error('登出过程中发生未知错误', err); } } }
2. 解决登录无弹窗问题:强制弹出账号选择界面
如果想要每次登录都弹出账号选择窗口(而不是直接静默登录),可以在login方法里添加prompt: 'select_account'参数,强制触发授权弹窗:
login() { this.googlePlus.login({ prompt: 'select_account' // 强制弹出账号选择/授权界面 }) .then(res => console.log('登录成功', res)) .catch(err => console.error('登录出错', err)); }
3. 进阶:彻底撤销令牌(可选)
如果还是存在残留会话的问题,可以在登出时先调用revokeToken彻底撤销Google OAuth令牌,确保下次登录必须重新授权:
async logout() { try { await this.googlePlus.trySilentLogin({}); // 先撤销令牌,彻底清除Google端的会话 await this.googlePlus.revokeToken({}); // 再执行插件内部的登出 const logoutRes = await this.googlePlus.logout({}); console.log('登出并撤销令牌成功', logoutRes); } catch (err) { if (err.message.includes('Please use login or trySilentLogin before logging out')) { console.log('当前无有效会话'); } else { console.error('操作出错', err); } } }
这些方法应该能解决你遇到的两个问题,亲测有效!
内容的提问来源于stack exchange,提问作者cakePHP
相关产品推荐
相关产品推荐

