Angularfire - 仅在第一次 OAuth(Google,facebook)登录时写入 Firestore

Angularfire - Only write to Firestore on the first OAuth (Google, facebook) login

包:

我有一个 Angular 应用程序,使用 Firebase 作为无服务器后端解决方案。用户可以使用他们的 Facebook 或 Google 帐户通过 Firebase Auth 注册和登录。他们成功登录后,我将他们的信息(displayName、createdAt、contactEmail)存储在 Firestore 中。

这是我使用的方法:

  public async googleLogin(): Promise<void> {
    try {
      const provider = new firebase.auth.GoogleAuthProvider();
      const response = await this.afAuth.signInWithPopup(provider);

      return this.afStore.create(response.user.uid,
        {
          id: response.user.uid,
          contactEmail: response.user.email,
          displayName: response.user.displayName,
          createdAt: this._userDB.createTimestamp()
        }
      );
    } catch (error) {
      return Promise.reject(error);
    }
  }

但是,我的问题是,每次用户登录时,都会调用此函数,随后之前设置的字段(如 displayName、createdAt 和 contactEmail)将被覆盖。如果用户是新用户或只是再次登录,我不知道如何检查 Firebase Auth。

在凭据(您的 const response 变量)中,您可以访问 response.additionalUserInfo.isNewUser to know if it is a new user or not。如果为真则创建用户,否则什么也不做:

  public async googleLogin(): Promise<void> {
    try {
      const provider = new firebase.auth.GoogleAuthProvider();
      const response = await this.afAuth.signInWithPopup(provider);
      // return an empty promise if user is not new
      if (!response.additionalUserInfo.isNewUser) { return Promise.resolve(); }
      return this.afStore.create(response.user.uid,
        {
          id: response.user.uid,
          contactEmail: response.user.email,
          displayName: response.user.displayName,
          createdAt: this._userDB.createTimestamp()
        }
      );
    } catch (error) {
      return Promise.reject(error);
    }
  }