Firebase-Web-验证帐户而没有可用的电子邮件

时间:2018-12-30 18:28:00

标签: javascript firebase firebase-authentication

在我的应用程序中,我添加了一些其他提供商(例如twitter或facebook)用于登录过程。在一种情况下使用Twitter提供程序时,它不会获取电子邮件地址。我怀疑,因为Twitter不知道用户的电子邮件(可能仅使用电话号码登录)。现在如何验证用户是否没有电子邮件可以使用<firebase.User>user.sendEmailVerification()

我可以使用Angular为我的应用程序登录过程提供一些代码。

服务

  public async loginWithDifferentProvider(provider: 'Google' | 'Facebook' | 'Twitter'): Promise<void | string | boolean> {
    let auth;
    switch (provider) {
      case 'Google':
        auth = new firebase.auth.GoogleAuthProvider();
        break;
      case 'Facebook':
        auth = new firebase.auth.FacebookAuthProvider();
        break;
      case 'Twitter':
        auth = new firebase.auth.TwitterAuthProvider();
        break;
    }

    try {
      await this.oAuthLogin(auth);
      return this.router.navigate(['/stories']);
    } catch (e) {
      this.notify.danger(e.message);
    }
  }

  private async oAuthLogin(provider) {
    const loginMetaData: UserCredential = await this.auth.firebaseAuthInstance.signInWithPopup(provider);
    const user: firebase.User = loginMetaData.user;
    let photoUrl: string;

    switch (loginMetaData.credential.providerId) {
      case 'twitter.com':
        photoUrl = loginMetaData.user.photoURL.replace('_normal', '');
        break;
      case 'facebook.com':
        const id = loginMetaData.additionalUserInfo.profile['id'];
        photoUrl = `https://graph.facebook.com/${id}/picture?type=large`;
        break;
    }

    return this.userService.createUserFromOtherProvider(user, photoUrl); // creates firestore doc. of the user
  }

1 个答案:

答案 0 :(得分:1)

sendEmailVerification方法专门用于验证用户的电子邮件地址。如果用户个人资料中没有电子邮件地址,则调用该方法毫无意义。

您可以检测到他们的个人资料没有电子邮件地址,然后向用户询问他们的电子邮件地址。然后,您可以set the email address in their Firebase Authentication profile并在之后致电sendEmailVerification进行验证。