SwiftUI中的Firebase身份验证
我在这里查看了firebase在线身份验证解决方案。我还没有找到实现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
- 无法将“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”