验证实时电子邮件验证 Firebase身份验证



我需要验证电子邮件是否在用户确认电子邮件后立即确认,因为在应用程序的主屏幕中,我打开了一个对话框,通知用户他需要确认电子邮件才能使用该应用程序。

当它不确认电子邮件时,将显示对话框,如果关闭,对话框将再次打开。

我正在验证如下:

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 将状态更改写入该用户的节点。

在客户端设备上,如果用户已登录(并且对该节点具有读取访问权限(,则侦听该数据库节点的更改以检测电子邮件验证。

相关内容

最新更新