我有一个简单的输入框,询问用户的电子邮件。
我希望他们输入内容,让我检查它是否为字符串,然后将确认电子邮件发送到他们输入的电子邮件地址。
然后,一旦在用户邮件客户端中验证并点击了该链接,我就希望将该用户添加到我的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确认电子邮件等?
答案 0 :(得分:1)
我有一个简单的输入框,询问用户的电子邮件。
我希望他们输入一些东西,让我检查它是一个字符串,然后 然后将确认电子邮件发送到他们输入的电子邮件地址。
然后,一旦在用户邮件客户端中验证并点击了该链接,我就希望将该用户添加到我的Firebase用户。
我不认为Firebase会这样运作。除非用户已注册,否则您无法向任意电子邮件地址发送验证电子邮件。 sendEmailVerification
方法适用于currentUser
。
您可以使用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之类的服务在您可以发送和接收的测试期间生成随机电子邮件地址。这样,您就可以在编程测试期间验证用户。