iOS中如何验证用户在账号安全中心取消授权后Google登录是否有效
Google登录授权有效性验证方案
原有方案失效原因
你之前使用的
GIDSignIn.sharedInstance()?.currentUser != nil和hasPreviousSignIn()判断逻辑仅读取本地缓存的登录态,不会和Google服务端同步授权状态,因此用户在Google账号管理页撤权后,本地缓存不会自动更新,导致判断失效。
正确校验逻辑
- 必须使用带回调的
restorePreviousSignIn方法,通过服务端返回的结果判断授权状态,不能仅依赖本地缓存 - 当回调返回指定错误码时,即可判定用户已取消授权或登录态已失效
代码示例
GIDSignIn.sharedInstance.restorePreviousSignIn { [weak self] user, error in // 存在错误时判定授权状态 if let error = error as? NSError { switch error.code { case kGIDSignInErrorCodeCanceled.rawValue, kGIDSignInErrorCodeHasNoAuthInKeychain.rawValue: // 用户已撤权,清除本地登录缓存 GIDSignIn.sharedInstance.signOut() GIDSignIn.sharedInstance.disconnect() // 此处添加引导用户重新登录的逻辑 default: // 其他错误按需处理 break } return } // 校验通过,用户授权仍然有效,可正常使用user对象的信息 guard let _ = user else { // 无有效用户信息,按授权失效处理 return } }
补充注意事项
- 建议每次App冷启动、进入需要Google授权的功能页时都执行一次上述校验逻辑
- 调用Google相关开放接口时如果返回401未授权状态,也需要触发上述校验逻辑同步授权状态
内容的提问来源于stack exchange,提问作者Vinoth
相关产品推荐
相关产品推荐

