我正在开发一个应用程序,用户可以在其中登录或验证其电子邮件。但是,如果未验证其电子邮件,则他们将只能访问一页,如果已验证,则它们将可以访问整个应用程序(AppView)。
到目前为止,使用我拥有的代码,我可以创建用户并登录他们,从而使他们可以访问整个应用程序。但是我不确定如果他们的电子邮件未经验证,如何显示其他视图。
这是我用于检查用户是否登录的代码:
func listen () {
// monitor authentication changes using firebase
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
// if we have a user, create a new user model
print("Got user: \(user)")
self.isLoggedIn = true
self.session = User(
uid: user.uid,
displayName: user.displayName, email: "")
} else {
// if we don't have a user, set our session to nil
self.isLoggedIn = false
self.session = nil
}
}
}
在这里,我选择应显示的视图:
struct ContentView: View {
@EnvironmentObject var session: SessionStore
func getUser () {
session.listen()
}
var body: some View {
Group {
if (session.session != nil) {
// I need to check here if the user is verified or not
AppView() //full application view
} else {
OnBoardingView()
}
}.onAppear(perform: getUser)
}
}
您可以通过检查User.isEmailVerified
属性来查看用户是否已通过验证。您可能遇到的主要问题是,单击电子邮件中的链接后,此属性不会立即刷新,因为iOS无法知道您单击了链接。
当客户端isEmailVerified
刷新令牌时,客户端将自动获取新值,该值每小时自动发生一次,当用户再次明确登录时,或者您明确强制它获取新的ID令牌时,也会自动获取。
使此流程为您的用户顺利运行的常用方法是:
或者,您可以在向用户发送电子邮件后将其注销,然后检查他们何时再次登录。虽然这更易于实现,但上述流程更加用户友好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句