2016-06-19 10 views
7

ile gönderilen bir e-posta doğruladı zaman bir istemci (web) için bir yol kullanıcı sendEmailVerification ile gönderilen bir e-posta doğruladı zaman/bildirim almak bilmek var mı haberdar olsun?Firebase - Kullanıcı sendEmailVerification

kullanıcı teyit ve kimlik doğrulama tamamlandı sonra bu bekleyin ve daha sonra oturum için durumunu değiştirmek için tek bir sayfa uygulama için önemlidir.

cevap

5

O Firebase email doğrulandı ve bu tür bir arayüz "şu anda düşünülmüyor" olduğunda istemci bildirim almak için doğrudan bir yol yoktur görünüyor.

function registerUserAndWaitEmailVerification(email, password, showWaitUI) { 
    return new Promise(function(resolve, reject) { 
     let interval=null; 

     firebase.auth().createUserWithEmailAndPassword(email, password).then(
      user => { 
       user.sendEmailVerification().then(
        () => { 
         if (showWaitUI) showWaitUI(); 
         interval = setInterval(() => { 
          user.reload().then(
           () => { 
            if (interval && user.emailVerified) { 
             clearInterval(interval); 
             interval=null; 
             resolve(user); 
            } 
           }, error => { 
            if (interval) { 
             clearInterval(interval); 
             interval=null; 
             console.log('registerUserAndWaitEmailVerification: reload failed ! '+error.message+' ('+error.code+')'); 
             reject(error); 
            } 
           } 
          ); 
         }, 1000); 
        }, error => { 
         console.log('registerUserAndWaitEmailVerification: sendEmailVerification failed ! '+error.message+' ('+error.code+')'); 
         reject(error); 
        }); 
      }, error => { 
       console.log('registerUserAndWaitEmailVerification: createUserWithEmailAndPassword failed ! '+error.message+' ('+error.code+')'); 
       reject(error); 
      } 
     ); 
    }); 
} 

kod yapacaktır::

  • çağrı sendEmailVerification
  • çağrı showWaitUI (verilirse)

    • çağrı createUserWithEmailAndPassword, burada müşteri gerektiği

      aşağıdaki çözüm geldi prob confirmati için e-postanızı kontrol edin 'talimatlarına (bir modal göstermek bağlantı. ') ve bir kum saati üzerinde

    • currentUser.reload() her saniye çağırarak, ve ya currentUser.emailVerified ile auth başarılı == true veya bir hata auth ile
    • azmini oluştu zaman() durdurma bir aralık döngü başlar
    • . kullanıcı başarılı cevher bununla hata

    ile reddetmek auth olsaydı yapabileceğiniz:

    function showRegisterUI() { 
        // show a modal with instructions ('Please check your email for the confirmation link.') and an hourglass  
    } 
    
    registerUserAndWaitEmailVerification(email, password, showRegisterUI).then(
        user => { 
         // uid in user.uid 
        , error => { 
         // alert user with error.message, go back to login screen 
        } 
        ); 
    } 
    

    Umut bu yardımcı olur :)

  • +1

    Oy up: Mükemmel cevap! – user2783091