Angularfire2阻止新用户在登录时进行身份验证

时间:2018-03-11 16:59:30

标签: angular firebase-authentication google-cloud-firestore angularfire2 google-login

如何阻止新用户使用Google登录?现在我知道通过谷歌登录的任何人都在我的Firebase(Firestore)项目中注册为经过身份验证的用户。我尝试使用credential.additionalUserInfo.isNewUser来阻止他们的信息存储在我的用户集合中,但他们的登录信息仍然在身份验证中生成。

  googleLogin() {
    const provider = new firebase.auth.GoogleAuthProvider();
    return this.oAuthLogin(provider);
  }

  private oAuthLogin(provider) {
    return this.afAuth.auth.signInWithPopup(provider).then(credential => {
      if (!credential.additionalUserInfo.isNewUser) {
        this.router.navigate(['/']);
        this.updateUserData(credential.user);
      }
    });
  }

1 个答案:

答案 0 :(得分:0)

您无法使用客户端阻止用户创建,但您可以执行以下操作,使用某些自定义属性标记它们,以告知您创建了哪些以及在没有管理员权限的情况下创建了哪些属性:

创建用户后。您可以通过Admin SDK在该用户上设置custom claim

admin.auth().setCustomUserClaims(uid, {alloweduser: true}).then(() => {
  // The new custom claims will propagate to the user's ID token the
  // next time a new one is issued. Since this is created before the user signs in,
  // then when the user signs in, they will have that claim directly.
});

然后,您可以通过安全规则强制执行访问,而无需进行任何查找:

{
  "rules": {
    "data": {
      "$user_id": {
        ".read" : "$user_id === auth.uid && auth.token.alloweduser === true",
        ".write" : "$user_id === auth.uid && auth.token.alloweduser === true"
      }
    }
  }
}

只允许您创建的用户访问内容。您可以运行一些重复脚本来删除尝试从客户端SDK注册的用户。