You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase集成Google登录后,注销再登录不显示账号选择弹窗

解决Google登录每次显示账号选择对话框的问题

这个问题其实是Google登录SDK的默认行为导致的——它会缓存用户上次登录的会话信息,所以注销后再次登录时会自动复用之前的账号,跳过选择框。要实现每次登录都弹出账号选择,只需要在登录请求里加个参数配置就行,具体步骤如下:

关键修改:添加prompt参数强制显示账号选择

在你发起Google登录的代码中,调用signIn方法时指定prompt: "select_account",这个参数会告诉Google登录SDK必须弹出账号选择界面,不管之前有没有缓存的登录状态。

假设你的登录按钮点击事件代码是这样的,修改后应该是:

@IBAction func googleLoginTapped(_ sender: UIButton) {
    // 重点就是这个prompt参数!设置为"select_account"强制显示账号选择
    GIDSignIn.sharedInstance.signIn(withPresenting: self, prompt: "select_account") { [weak self] result, error in
        guard let self = self else { return }
        
        if let error = error {
            print("登录出错:\(error.localizedDescription)")
            return
        }
        
        guard let user = result?.user, let idToken = user.idToken?.tokenString else {
            print("无法获取用户身份令牌")
            return
        }
        
        // 生成Firebase凭证并完成登录
        let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: user.accessToken.tokenString)
        Auth.auth().signIn(with: credential) { authResult, error in
            if let error = error {
                print("Firebase登录失败:\(error.localizedDescription)")
                return
            }
            // 登录成功,跳转主页面
            self.navigationController?.pushViewController(MainViewController(), animated: true)
        }
    }
}

额外注意:注销时要同时清除Google和Firebase的会话

确保你的注销方法里,不仅调用Firebase的signOut(),还要调用GoogleSignIn的signOut(),这样才能彻底清除缓存的登录信息:

@IBAction func logoutTapped(_ sender: UIButton) {
    do {
        // 清除Firebase登录状态
        try Auth.auth().signOut()
        // 清除GoogleSignIn的缓存会话
        GIDSignIn.sharedInstance.signOut()
        // 回到登录页面
        navigationController?.popToRootViewController(animated: true)
    } catch {
        print("注销出错:\(error.localizedDescription)")
    }
}

关于prompt参数的小补充

这个参数还有其他可选值,你可以根据需求调整:

  • select_account:就是我们用的,强制显示账号选择界面,用户可以切换账号或添加新账号
  • consent:强制显示授权同意界面,即使用户之前已经授权过你的应用
  • none:默认行为,会复用缓存的登录状态,不弹出额外界面

这样修改后,每次用户点击Google登录按钮,都会弹出账号选择对话框啦!

内容的提问来源于stack exchange,提问作者Agung

火山引擎 最新活动