ios - 应用程序委托(delegate)中的 Firebase 用户身份验证检查

标签 ios swift firebase firebase-realtime-database firebase-authentication

我在应用程序委托(delegate)中实现了 Firebase Auth 和 Firebase 数据库,它检查用户是否登录。它检查数据库中的“用户”节点以查看子快照中是否有用户 ID 以及此操作大约需要 2-3 秒。

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()

    if let uid = Auth.auth().currentUser?.uid {
        Database.database().reference().child("users").child(uid).observeSingleEvent(of: .value, with: { snapshot in
            if snapshot.exists() {
                print("App Delegate: User found!")
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let vc  = storyboard.instantiateViewController(withIdentifier: "Main")
                self.window?.rootViewController = vc
                self.window?.makeKeyAndVisible()
            }
            else{
                print("App Delegate: User not found!")
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let vc  = storyboard.instantiateViewController(withIdentifier: "Login")
                self.window?.rootViewController = vc
                self.window?.makeKeyAndVisible()
        }
        })
    }
    return true
}

登录 View Controller 是初始 View Controller 。当启动屏幕淡出时,会显示登录 viewController,如果用户已登录,则会显示主 viewController,但在这种情况下,显示登录 viewController 的时间间隔为 2-3 秒。 我也尝试实现 NavigationController 但同样的问题。

那么,如果用户已登录并直接进入主视图 Controller 并有效地管理 2-3 秒的时间间隔,我怎么能不显示登录 View Controller 。

最佳答案

在登录和注销成功时跟踪本地 session 中的 isLogin 变量,使其为真和假。当第一次登录然后检查你的 session 变量isLogin。您可以将 session 保存在 UserDefault 或 Keychain 中。这样您就可以避免遇到问题。

或者你只需​​要这样检查:

if FIRAuth.auth().currentUser != nil {
   presentHome()
} else {
 //User Not logged in
}

在那之后,当你导航到 desire viewController 时,在那里做剩下的事情。

关于ios - 应用程序委托(delegate)中的 Firebase 用户身份验证检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077793/

相关文章:

android - 使用 Firebase 对 ArrayList 进行排序

Swift 5,如何在从 Firebase 获取所有添加的子项后执行代码

ios - MKPolyline 仅绘图点

ios - 检测 UIScrollView 和 UIView 组件上的触摸事件 [放置在 UIScrollView 内]

ios - Swift: TableView 父类(super class)错误

ios - 在后台模式下保持流式音频连续

ios - UITableViewCell 背景 View 图像未下载并显示正确的图像

ios - 快速获取特定时间之间的位置

ios - (快速)在遍历数组时移动对象

javascript - Firebase 实时数据库在实际构建中无法在 Ionic iOS 上运行,但可以在实时重新加载中运行