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这样的服务在测试过程中生成随机电子邮件地址,您可以发送和接收该地址。这样您就可以在编程测试期间验证用户。