Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI中的Firebase身份验证_Swift_Firebase_Swiftui_Firebase Authentication - Fatal编程技术网

SwiftUI中的Firebase身份验证

SwiftUI中的Firebase身份验证,swift,firebase,swiftui,firebase-authentication,Swift,Firebase,Swiftui,Firebase Authentication,我在这里查看了firebase在线身份验证解决方案。我还没有找到实现firebase身份验证侦听器的解决方案 旧的解决方案对侦听器使用以下代码。我使用了它并给出了一个错误 无法将“User.type”类型的值分配给用户 //下面是我用于侦听器的以下代码 func listen() { handle = Auth.auth().addStateDidChangeListener({ (auth, user) in if let user = user { self.se

我在这里查看了firebase在线身份验证解决方案。我还没有找到实现firebase身份验证侦听器的解决方案

旧的解决方案对侦听器使用以下代码。我使用了它并给出了一个错误

  • 无法将“User.type”类型的值分配给用户
//下面是我用于侦听器的以下代码

func listen() {
   handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
   if let user = user {
      self.session = User
   } else {
     self.session = nil
            }
        })
    }
//这是下面的用户模型

struct User {
    var uid: String
    var email: String
}

如果您希望像这样使用自己的
用户
模型(而不是使用Firebase提供的
用户
对象),您可以执行以下操作:


func listen() {
        handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
            if let user = user {
                self.session = User(uid: user.uid, email: user.email ?? "") //the ?? "" provides a default value in case the email provided by Firebase is nil
            } else {
                self.session = nil
            }
        })
}

然而,摆脱自己的
用户
模型代码,只使用Firebase提供的代码可能更容易。因此,一旦删除了
struct User{}
代码,就可以执行以下操作:

func listen() {
        handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
            if let user = user {
                self.session = user
            } else {
                self.session = nil
            }
        })
}

由于您的应用程序和Firebase都提供
User
对象,因此您可能会遇到名称空间冲突(两种类型共享相同的名称),除非您更改
User
struct的名称(或者,实现我给出的第二个建议)。见:
您可以在ViewModel中这样做:

@Published var session = UserModel()

func listenAuth() {
    listenerAuth = Auth.auth().addStateDidChangeListener { (auth, user) in
        if let user = user {
            self.session = UserModel(uid: user.uid, email: user.email ?? "")
        } else {
          self.session = nil
        }
    }
}
只需写“self.session=user”而不是“self.session=user”