You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase AuthUI如何判断新/老用户并跳转至不同视图控制器?

解决Firebase AuthUI区分新老用户跳转的问题

别急,Firebase确实提供了检测新用户的方法!你目前的问题是没在登录完成的回调里区分用户状态,所以才会不管新老都跳同一个segue。下面是具体的解决步骤和代码修改:

核心思路

Firebase Auth的User对象里包含一个additionalUserInfo属性,其中的isNewUser布尔值就是用来判断这个用户是否是首次登录/注册的。我们只需要在登录完成的代理方法里读取这个值,就能分支处理跳转逻辑。

修改后的完整代码

首先确保你正确实现了FUIAuthDelegate的回调方法,然后在里面加入判断逻辑:

@IBAction func phoneNumberLoginAction(_ sender: AnyObject) {
    guard let authUI = FUIAuth.defaultAuthUI() else {
        print("AuthUI初始化失败")
        return
    }
    
    authUI.delegate = self
    let phoneProvider = FUIPhoneAuth(authUI: authUI)
    authUI.providers = [phoneProvider]
    
    // 弹出登录界面
    let authVC = authUI.authViewController()
    present(authVC, animated: true)
}

// MARK: - FUIAuthDelegate 代理实现
extension YourViewController: FUIAuthDelegate {
    func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
        // 先处理登录错误的情况
        guard let currentUser = user, error == nil else {
            print("登录出错:\(error?.localizedDescription ?? "未知错误")")
            return
        }
        
        // 关键:判断是否为新用户
        let isNewUser = currentUser.additionalUserInfo?.isNewUser ?? false
        
        if isNewUser {
            // 新注册用户,跳转到你原来的signUpSegue对应的页面
            performSegue(withIdentifier: "signUpSegue", sender: self)
        } else {
            // 老用户,跳转到主页或者其他你需要的页面(记得在Storyboard里设置对应的segue标识符)
            performSegue(withIdentifier: "homeSegue", sender: self)
        }
    }
}

注意事项

  • 一定要确保在Storyboard里给老用户跳转的segue设置正确的标识符(比如上面的homeSegue),否则会报错。
  • additionalUserInfo?.isNewUser可能为nil,所以用?? false做兜底,避免空值崩溃。
  • 这个方法不仅适用于手机号登录,邮箱、Google等其他Firebase支持的登录方式也同样适用,逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:50:53