验证实时电子邮件验证FirebaseAuth

时间:2018-03-17 01:27:43

标签: typescript firebase firebase-authentication angular5

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

虽然它没有确认电子邮件,但是显示对话框,如果关闭,对话框将再次打开。

我的验证如下:

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的页面来更新。

1 个答案:

答案 0 :(得分:0)

更好的实时方法(HTTP轮询费用昂贵,效率低)是建立自己的自定义电子邮件验证着陆页: https://firebase.google.com/docs/auth/custom-email-handler

然后在该登录页面上,您在数据库节点中设置了一些标志,该标志只有该用户可以访问以确认在您应用代码时验证了电子邮件。为了更加安全,您可以将该节点设置为只读并将代码发送到您的服务器(或使用云功能托管的某个http端点),在那里进行验证,然后使用Admin SDK将状态更改写入该用户的节点。

在客户端设备上,用户已登录(并具有对该节点的读取权限),您将监听该数据库节点的更改以检测电子邮件验证。