Firebase电子邮件验证工作流程

时间:2016-11-21 21:12:44

标签: javascript email firebase firebase-realtime-database firebase-authentication

我有一个简单的输入框,询问用户的电子邮件。

我希望他们输入内容,让我检查它是否为字符串,然后将确认电子邮件发送到他们输入的电子邮件地址。

然后,一旦在用户邮件客户端中验证并点击了该链接,我就希望将该用户添加到我的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警报,在单击提交按钮时会弹出。但是,我在/signups部分下的Firebase数据信息中心中看不到任何更改。此外,URL更改为:

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

我将规则修改为:

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

所以我认为这与规则无关,因为我已经为测试目的启用了所有内容。

我如何实现我想要实现的目标(没有,然后使用电子邮件确认部分)?

现有设置出了什么问题,没有通过SendGrid确认电子邮件等?

2 个答案:

答案 0 :(得分: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( .... )
}

答案 1 :(得分:0)

仅供参考,如果您使用Firebase电子邮件验证,请考虑在端到端或冒烟测试期间对其进行测试。

使用emaile2e.com之类的服务在您可以发送和接收的测试期间生成随机电子邮件地址。这样,您就可以在编程测试期间验证用户。