我正在try 使用Firebase身份验证在我的SWIFT应用程序中实现登录功能.如何判断用户是否已登录并将其重定向到主屏幕(如果已登录)?

我遵循了Firebase身份验证文档,并使用邮箱和密码成功设置了我的登录流.然而,当用户打开应用程序并且之前已经登录时,我想判断他们是否已经通过身份验证,并自动将他们重定向到主屏幕.为此,我try 使用100方法监听用户身份验证状态的更改,但我不确定如何使用此信息自动重定向用户.我预计如果用户已经登录,监听程序会检测到这一点并触发重定向到主屏幕

推荐答案

您可以使用Auth.auth().addStateDidChangeListener方法在根视图控制器或主视图控制器中监听用户身份验证状态的更改.

当监听器被触发时,您可以通过访问Auth.auth().currentUser属性来判断用户是否登录.如果用户已登录,则可以使用PerformSegue方法以编程方式转换到主屏幕

下面是一个示例,说明这在代码中可能是什么样子:

导入Firebase

class MainViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        Auth.auth().addStateDidChangeListener { [weak self] (auth, user) in
            if let user = user {
                // User is logged in, so redirect to home screen
                self?.performSegue(withIdentifier: "HomeSegue", sender: self)
            }
        }
    }
    
}

Swift相关问答推荐

如何取消正在视图修改器中运行的任务

如何在HStack中均匀分布视图?

音频播放器无法播放URL音频(操作系统状态错误2003334207.)

传递给SWIFT ResultBuilder的闭包中结果类型的对象

关闭 SwiftUI TabView 中的子视图

允许视图在视图内更改

CardStack 和 Lottie

(Swift)混淆了函数内 for-in 循环的返回值和循环后(函数内)的返回值)

可以使 Swift init 仅可用于 Objective C 吗?

如何让默认函数参数引用另一个函数参数?

为什么 SwiftUI 中 ForEach 的这个 Select 不起作用?

Swiftui 无法从核心数据中获取数据

XCUITest 在 TearDown 期间随机失败-无法终止 com.bundle.id

在 Vapor 4 中使用协议的通用流利查询

数组使用偏移量对自身执行 XOR

如何获取 NSRunningApplication 的参数?

如何有条件地格式化 SwiftUI 代码

'NSLog' 不可用:可变参数函数在 swift 中不可用

如何在 Swift 中将对象归零

如何在swift中的每N个字符处为字符串添加分隔符?