0

私はユーザの電子メールを要求する簡単な入力ボックスを持っています。Firebaseの電子メール確認ワークフロー

私は彼らが文字列であることを確認するために何かを入力して、入力した電子メールアドレスに確認メールを送信します。

その後、ユーザのメールクライアント内で確認され、リンクがクリックされると、そのユーザを自分のFirebaseユーザに追加します。

現時点では、私はSMTP経由でメールを送信せずに、Firebaseにデータを追加するだけでテストしています。ただし、追加した電子メールはFirebaseデータベースに追加されません。他のスクリプトタグの前にHTMLの本体の底部、(?これは頭の中にあるべき)で

現在のコード:

<script src="https://www.gstatic.com/firebasejs/3.6.1/firebase.js"></script> 
    <script> 
     // Initialize Firebase 
     var config = { 
      apiKey: "myapikey", 
      authDomain: "mydomain.firebaseapp.com", 
      databaseURL: "https://mydomain.firebaseio.com", 
      storageBucket: "mydomain.appspot.com", 
      messagingSenderId: "mymessagesenderid" 
     }; 
     firebase.initializeApp(config); 
    </script> 
    <script src="assets/js/saveEmail.js" type="text/javascript"></script> 

それから私は、入力ボックスを持っている:

 <div class="mtb"> 
    <h2 class="signup-title">Sign up for updates on our project</h2> 
    <p id="signup-success" class="text-success"></p> 
    <p id="signup-error" class="text-danger"></p> 
    <form class="signup-form form-inline" id="signup-form" role="form" onsubmit="return signup(this)"> 
     <div id="div"> 
     <input type="email" name="email" class="subscribe-input" placeholder="Enter your e-mail address..." required> 
     <button class='btn btn-conf btn-yellow' id="signup-button" type="submit">Submit 
     </button> 
     </div> 
    </form> 
</div> 

そして、これはsaveEmail.js次のとおりです。

var signupForm = document.getElementById('signup-form'); 
var signupSuccess = document.getElementById('signup-success'); 
var signupError = document.getElementById('signup-error'); 
var signupBtn = document.getElementById('signup-button'); 
var onSignupComplete = function (error) { 
    signupBtn.disabled = false; 
    if (error) { 
     signupError.innerHTML = 'Sorry. Could not signup.'; 
    } else { 
     signupSuccess.innerHTML = 'Thanks for signing up!'; 
     // hide the form 
     signupForm.style.display = 'none'; 
    } 
}; 

function signup(formObj) { 
    // Store emails to firebase 
    var myFirebaseRef = new Firebase("https://mydomain.firebaseio.com/signups"); 
    myFirebaseRef.push({ 
     email: formObj.email.value, 
    }, onSignupComplete); 
    signupBtn.disabled = true; 
    return false; 
} 

私が知っているsignup楽しいこと送信ボタンがクリックされたときにポップアップする簡単なJSアラートを試してみたところ、ctionが呼び出されていました。しかし、Firebaseのデータダッシュボードの/signupsセクションに何も変更はありません。また、へのURLの変更:だから私は、私はテスト目的のためにすべてを有効にしているとして、これはルールではないと仮定し

{"rules": 
{".read": true, 
    ".write": true 
} 
} 

http://localhost:5000/?email=theemailthatwasputintothebox 

私はに私のルールを変更しました。

私は達成したいことを達成するにはどうしたらいいですか?

SendGridなどを介した電子メールの確認なしに、既存の設定に問題がありますか?

答えて

1

私はユーザーの電子メールを要求する簡単な入力ボックスを持っています。

私は彼らが文字列であることを確認するために何かを入力したいとし、 は入力した電子メールアドレスに確認メールを送信します。

その後、ユーザのメールクライアント内で確認され、リンクがクリックされると、そのユーザを自分のFirebaseユーザに追加します。

私はFirebaseがそのように動作するとは思わない。ユーザーが登録されていない限り、任意の電子メールアドレスに確認メールを送信することはできません。 sendEmailVerificationメソッドはcurrentUserで動作します。

According to the docs:あなたはあなたのスニペットに、

今sendEmailVerification方法でユーザーにアドレス確認メールを送信することができます

が、あなたは、単にユーザーの入力を取るしようとしていないとそれをデータベースに保存しますか?あなたはFirebase電子メールの検証を使用している場合は、最近のSDKを使用すると、FYI as per docs

.... 

var database = firebase.database(); 

function signup(formObj) { 
    // Store emails to firebase 
    database.ref('signups') 
     .push({ 
     email: formObj.email.value, 
     }) 
     .then(function(res) { 
     console.log(res) 
     // call whatever callback you want here 
     }) 
     .catch(....) 
} 
+0

ありがとう@Rexford、これは完璧です。私は電子メールの一意性をどのように保つのですか?一組のFirebase IDはユニークですが、押し込んだ電子メールには束縛されません。固有の電子メールのみを許可し、その電子メールがHTMLページにすでに登録されているかどうかを警告します。 –

+0

@DhruvGhulati電子メールとパスワードからcreate userのFirebase機能は、エラーが既に存在する場合、電子メールの重複エラーを返します。 – ostergaard

0

、これを試すことができ、あなたのエンド・ツー・エンドまたはスモークテスト中にそれをテストについて考えます。

emaile2e.comのようなサービスを使用して、テスト中に送受信できるランダムな電子メールアドレスを生成します。これにより、テスト中にユーザーをプログラマチックに検証できます。

関連する問題