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樂趣正在調用ction,因爲我嘗試了一個簡單的JS警報,當點擊提交按鈕時彈出。不過,我在/signups部分下的Firebase數據信息中心看不到任何更改。此外,URL變化:

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

我修改了規則:

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

所以,我認爲,我已經啓用了所有用於測試目的,這是不是規則。

我怎樣才能達到我想達到的目的(沒有,然後用電子郵件確認部分)?

什麼是錯誤的現有的設置,沒有通過SendGrid的電子郵件確認等?

回答

1

我有一個簡單的輸入框詢問用戶的電子郵件。

我希望他們輸入一些東西,我檢查它是一個字符串,然後 然後發送驗證電子郵件到他們輸入的電子郵件地址。

然後,一旦通過用戶郵件客戶端驗證並點擊鏈接,我想要將用戶添加到我的Firebase用戶。

我不認爲Firebase以這種方式工作。除非用戶註冊,否則不能將驗證電子郵件發送到任意電子郵件地址。 sendEmailVerification方法適用於currentUser

According to the docs

您可以用sendEmailVerification方法發送一個地址驗證郵件到用戶現在

,你的片斷,不是你只是試圖把用戶輸入和保存到數據庫?隨着近期SDK,你可以,如果你正在使用火力地堡驗證電子郵件通知你試試這個,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從電子郵件和密碼創建用戶的Firebase功能將在錯誤已存在時返回重複的電子郵件錯誤。 – ostergaard

0

想想在你的終端到終端或煙霧測試,測試它。

使用像emaile2e.com這樣的服務在測試過程中生成隨機電子郵件地址,您可以發送和接收該地址。這樣您就可以在編程測試期間驗證用戶。