firebase-当用户确认通过sendEmailVerification发送的电子邮件时收到通知
当用户确认通过sendEmailVerification发送的电子邮件时,客户端(web)是否有办法知道/得到通知firebase-当用户确认通过sendEmailVerification发送的电子邮件时收到通知,firebase,firebase-authentication,Firebase,Firebase Authentication,当用户确认通过sendEmailVerification发送的电子邮件时,客户端(web)是否有办法知道/得到通知 这对于单页应用程序来说很重要,在用户确认并完成身份验证后等待,然后将状态更改为登录。FireBase似乎没有一种直接的方式让客户端在验证电子邮件时收到通知,并且这种接口“目前未被考虑” 我提出了以下解决方案: function registerUserAndWaitEmailVerification(email, password, showWaitUI) { return
这对于单页应用程序来说很重要,在用户确认并完成身份验证后等待,然后将状态更改为登录。FireBase似乎没有一种直接的方式让客户端在验证电子邮件时收到通知,并且这种接口“目前未被考虑” 我提出了以下解决方案:
function registerUserAndWaitEmailVerification(email, password, showWaitUI) {
return new Promise(function(resolve, reject) {
let interval=null;
firebase.auth().createUserWithEmailAndPassword(email, password).then(
user => {
user.sendEmailVerification().then(
() => {
if (showWaitUI) showWaitUI();
interval = setInterval(() => {
user.reload().then(
() => {
if (interval && user.emailVerified) {
clearInterval(interval);
interval=null;
resolve(user);
}
}, error => {
if (interval) {
clearInterval(interval);
interval=null;
console.log('registerUserAndWaitEmailVerification: reload failed ! '+error.message+' ('+error.code+')');
reject(error);
}
}
);
}, 1000);
}, error => {
console.log('registerUserAndWaitEmailVerification: sendEmailVerification failed ! '+error.message+' ('+error.code+')');
reject(error);
});
}, error => {
console.log('registerUserAndWaitEmailVerification: createUserWithEmailAndPassword failed ! '+error.message+' ('+error.code+')');
reject(error);
}
);
});
}
守则将:
- 使用Email和Password调用CreateUsers
- 呼叫发送电子邮件验证
- 呼叫showWaitUI(如果给出),客户应在此处显示一个带有说明的模式(“请检查您的电子邮件中的确认链接”)和一个沙漏
- 每秒启动一个调用currentUser.reload()的间隔循环,并在使用currentUser.emailVerified==true进行身份验证成功或发生错误时停止
- 使用auth()进行解析。如果auth成功,请使用户进行解析,否则拒绝,但出现错误
function showRegisterUI() {
// show a modal with instructions ('Please check your email for the confirmation link.') and an hourglass
}
registerUserAndWaitEmailVerification(email, password, showRegisterUI).then(
user => {
// uid in user.uid
, error => {
// alert user with error.message, go back to login screen
}
);
}
希望这对您有所帮助:)请记住,调用reload()会导致客户端和Firebase服务器之间的通信量-每秒调用一次可能会产生比您想要的多得多的通信量。不过,这可能只是一个问题,如果你有很多注册的话 但是,我不知道除了调用reload()之外还有什么解决方案(至少在应用程序中),除非您注销用户并要求他们在单击电子邮件链接后重新登录
我使用的解决方案是,在注册后,指示用户单击电子邮件中的链接,然后单击“继续”。单击“继续”后,执行重新加载(),并在重新加载的onComplete()回调中,检查是否已收到电子邮件验证。如果没有,他们会收到一条消息并停留在同一屏幕上。这样,只有当用户执行某个操作时,我才有与reload()相关的流量。投票:完美答案!