2016-06-19 27 views
7

sendEmailVerificationで送信された電子メールをユーザが確認したときに、クライアント(ウェブ)が通知/通知する方法はありますか?firebase - sendEmailVerificationで送信された電子メールをユーザが確認したときに通知を受ける

これは、ユーザーが確認して認証が完了すると、1ページアプリケーションが待機してから状態をログインに変更するために重要です。

答えて

5

FireBaseは、電子メールが確認され、そのようなインターフェイスが「現在考慮されていません」と通知された場合、クライアントに通知する直接的な方法はないようです。

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); 
      } 
     ); 
    }); 
} 

コードは以下となります:

  • コールsendEmailVerification
  • コールshowWaitUI(与えられている場合)

    • 呼び出しがcreateUserWithEmailAndPassword、ここでクライアントがすべき

      は、私は、次の解決策を考え出しましたprob モーダル説明書を添付してください( '確認のメールをご確認くださいリンク。 ')と砂時計に

    • はcurrentUser.reload()毎秒を呼び出し、そしてどちらかcurrentUser.emailVerifiedと認証成功== trueまたはエラーが認証と
    • 決意をするとき発生した()の停止間隔のループを開始し
    • 。ユーザーが成功した鉱石はこれでエラー

    で拒否認証がいた場合は行うことができます。

    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 
        } 
        ); 
    } 
    

    ・ホープ、このことができます:)

  • +1

    投票まで:完璧な答え! – user2783091

    関連する問題