我需要验证电子邮件是否在用户确认电子邮件后立即确认,因为在应用程序的主屏幕中,我打开了一个对话框,通知用户他需要确认电子邮件才能使用该应用程序。
当它不确认电子邮件时,将显示对话框,如果关闭,对话框将再次打开。
我正在验证如下:
auth.service.ts:
export class AuthService {
usuario: any;
constructor(private afAuth: AngularFireAuth) {}
getUser() {
return new Promise((resolve, reject) => {
this.afAuth.auth.onAuthStateChanged((user: any) => {
if (user) {
this.user = user;
}
resolve(user);
},
(response: any) => {
reject(response);
});
});
}
main.component.ts:
export class MainComponent {
constructor( private authService: AuthService,){
this.checkConfirmEmail();
}
checkConfirmEmail() {
this.authService.getUser().then((user: any) => {
if (user.emailVerified == false) {
this.showConfirmEmail();
}
});
}
}
如上所述,它仅在刷新页面时user.emailVerified
更新,我需要一种方法,这样我就不必刷新页面以使user.emailVerified
保持最新状态。
更好的实时方法(HTTP 轮询昂贵且效率低下(是构建您自己的自定义电子邮件验证登录页面:https://firebase.google.com/docs/auth/custom-email-handler
然后,在该登录页面上,您在数据库节点中设置了一些标志,只有该用户可以访问该标志,以确认在您应用代码时电子邮件已验证。为了提高安全性,您可以将该节点设为只读,并将代码发送到您的服务器(或使用云函数托管的某些 http 端点(,在那里进行验证,然后使用 Admin SDK 将状态更改写入该用户的节点。
在客户端设备上,如果用户已登录(并且对该节点具有读取访问权限(,则侦听该数据库节点的更改以检测电子邮件验证。