2017-09-10 128 views
1

在將用戶添加到數據庫之前,Firebase中有一種方法可以驗證用戶的電子郵件嗎? 我的最終目標是創建一個註冊表單,用戶首先輸入電子郵件地址,然後按下「驗證電子郵件地址」按鈕。此時將發送驗證電子郵件,用戶將從內部鏈接進行確認電子郵件地址。現在,當回到應用程序時,用戶將具有繼續按鈕,並且如果電子郵件未被驗證,則用戶將不能註冊,如果相反,用戶將能夠註冊。創建用戶之前的Firebase sendEmailVerification

我該如何解決這個問題? 到目前爲止,所有文檔都說我必須創建用戶,然後才能使用currentUser.sendEmailVerification,但顯然,我不想在驗證之前創建用戶。 我也想過使用完成塊,但我不確定如何解決這個問題,因爲註冊將不得不推遲到用戶按下繼續按鈕。

感謝

Auth.auth().createUser(withEmail: email, password: password, completion: {(user: User?, error) in 

      if error != nil { 
       print(error!) 
       return 
      } 

      guard let uid = user?.uid else { 
       return 
      } 


      let ref = Database.database().reference(fromURL: "https://project/") 
      let values = [ 
       "email": email, 
       "userName": userName, 
       "name": name, 
       "birthDate": birthDate, 
       "phoneNumber": phoneNumber] 

      let userReference = ref.child("users").child(uid) 
      userReference.updateChildValues(values, withCompletionBlock: {(err, ref) in 
       if err != nil{ 
        print(err!) 
        return 
       } 

       print("Successfully added user to database") 
      }) 

      let usedUserReference = ref.child("users-Used").child(userName) 
      usedUserReference.setValue(uid, withCompletionBlock: {(err, ref) in 
       if err != nil{ 
        print(err!) 
        return 
       } 

       print("Successfully added user to cannot be used-again list") 
      }) 

     }) 
+0

如果您只想在用戶驗證之前採取措施,那麼在用戶登錄並且該用戶的emailVerified屬性爲true時執行該操作。您無法避免創建用戶和發送電子郵件驗證請求的要求。 –

回答

1

你不能用火力地堡驗證這一點。用戶需要首先創建,因爲該記錄是「容器」,它爲電子郵件驗證提供了有關哪些用戶在回覆電子郵件時實際驗證過的適當上下文。

在您的應用程序中,您可以檢查是否使用emailVerified屬性驗證了特定的用戶帳戶。這使您可以爲最終用戶提供不同的驗證方面的經驗。

+0

明白了,謝謝。那麼你如何開始驗證?這樣我可以在之後使用emailVerified。所有這些沒有添加用戶數據庫,如果沒有驗證 –

+0

請重新閱讀我的答案。必須添加用戶對象才能執行驗證。沒有解決方法。 –

+0

那麼有什麼方法可以在將用戶電子郵件添加到我的數據庫之前進行驗證?或者添加它們,如果證明它們沒有被驗證刪除它們,或者像點擊鏈接時暫停線程,並且如果不取消? –

相關問題