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
相关产品推荐
相关产品推荐

