Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Swift 如何检查用户';您的电子邮件是否已验证?_Swift_Firebase_Firebase Authentication_Swiftui - Fatal编程技术网

Swift 如何检查用户';您的电子邮件是否已验证?

Swift 如何检查用户';您的电子邮件是否已验证?,swift,firebase,firebase-authentication,swiftui,Swift,Firebase,Firebase Authentication,Swiftui,我正在制作一个应用程序,用户可以登录,无论他们的电子邮件是否经过验证。但是,如果他们的电子邮件未经验证,他们将只能访问一个页面,如果验证,他们将访问整个应用程序(AppView) 到目前为止,通过我拥有的代码,我能够创建一个用户并让他们登录,让他们能够访问完整的应用程序。但如果他们的电子邮件未经验证,我不确定如何显示其他视图 以下是检查用户是否已登录的代码: func listen () { // monitor authentication changes using firebase

我正在制作一个应用程序,用户可以登录,无论他们的电子邮件是否经过验证。但是,如果他们的电子邮件未经验证,他们将只能访问一个页面,如果验证,他们将访问整个应用程序(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)
    
  }

}

您可以通过检查。您可能会遇到的主要问题是,在您单击电子邮件中的链接后,此属性不会立即刷新,因为iOS无法知道您单击了该链接

当客户端刷新令牌时,客户端将自动拾取
isEmailVerified
的新值,该刷新每小时自动发生一次,当用户再次显式登录时,或当您显式登录时

让用户顺利运行此流程的常用方法是:

  • 当iOS恢复焦点时强制刷新ID令牌
  • 在“等待验证您的电子邮件地址”屏幕上,强制定期刷新Id令牌
  • 向用户显示一个按钮“我验证了我的电子邮件地址”,然后刷新ID令牌
或者,您可以在向用户发送电子邮件后注销用户,然后在用户再次登录时进行检查。虽然这更易于实现,但上面的流程更为用户友好