微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Firebase 身份验证未按预期工作用户正在登录主屏幕或注册页面

如何解决Firebase 身份验证未按预期工作用户正在登录主屏幕或注册页面

我正在尝试进行 Firebase 身份验证,但无法成功进行身份验证。我有一个用户可以遵循的身份验证流程。但是一旦用户注册,他们就会显示在主屏幕上,而不是在注册流程之后转到其他页面。这段代码在我的场景委托中的 willConnectTo session 函数中。

weak var handle: AuthStateDidchangelistenerHandle?

    handle = Auth.auth().addStateDidchangelistener { [weak self] (auth,user) in
           if((user) != nil){
               let home = MainVC() 
            
            print("User is already signed in")
            
            self!.window?.rootViewController = home
            
           } else if((user) == nil) {
               print("Not Logged in")
               let signup = SignUpVC()
            self!.window?.rootViewController = signup
            
           }
       }

如果有人可以帮助解决这个问题或提供任何可能的提示,我将不胜感激。

解决方法

我猜,在您的 SignUpVC 中您调用 Auth.auth().createUser(..),然后用户应该继续到另一个注册屏幕以完成他的个人资料?

问题是,在调用 createUser() 后,Firebase 将使用新创建的用户对象再次调用您的 addStateDidChangeListener
这次您的检查 user != nil 成功,您的代码会将 mainVC 作为 rootVC 推送。


所以也许您应该检查一下用户对象是否也已完全设置。如果缺少某些设置,请引导用户使用 CompleteSignUpVC。
您的代码可能如下所示:

handle = Auth.auth().addStateDidChangeListener { [weak self] (auth,user) in
       if((user) == nil){
           print("Not Logged in")
           let signup = SignUpVC()
           self!.window?.rootViewController = signup
           return
       }
        
       if (user.isSignUpCompleted()) {
           print("User is already signed in")
           let home = MainVC() 
           self!.window?.rootViewController = home
       } else {
           print("User needs to complete signUp flow")
           let home = CompleteSignUpVC() 
           self!.window?.rootViewController = home
           
           // or otherwise,ignore this case and do nothing further,// since your current flow will do the rest
       }
   }

如果这可能无法解决您的问题,请提供有关您的应用注册流程的更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?