有没有一种方法可以不创建新用户,而仅允许现有用户使用firebase_auth登录,并通过google登录?

时间:2019-05-27 02:00:42

标签: firebase flutter dart firebase-authentication

我希望我的应用仅对以前登录的用户进行身份验证,而不希望创建新用户。我正在使用Flutter和Firebase身份验证。我使用google作为登录方法。

我在互联网上搜索了没有运气的解决方案。我看到的所有示例都会在此过程中创建新用户

void _signInWithGoogle() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth =
      await googleUser.authentication;
  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );
  final FirebaseUser user = await _auth.signInWithCredential(credential);

  assert(user.email != null);
  assert(user.displayName != null);
  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final FirebaseUser currentUser = await _auth.currentUser();
  assert(user.uid == currentUser.uid);
  setState(() {
    if (user != null) {
      _success = true;
      _userID = user.uid;
      print(user.displayName);
      print(user.phoneNumber);
      print(user.email);
    } else {
      _success = false;
    }
  });
}

我希望当有新用户尝试登录时,此操作会失败。但这似乎会创建一个用户,然后将其登录。

1 个答案:

答案 0 :(得分:0)

无法阻止用户使用Firebase身份验证登录。如果启用了提供程序,则用户可以使用该提供程序登录。

但是他们登录仅能证明其凭证。如果我使用Google帐户登录到您的应用程序,那么它所做的一切就是证明我知道该Google帐户的凭据。

是否授予用户访问某些资源(称为授权)的权限是一个完全独立的过程,取决于您的应用程序。例如,如果您使用Firebase实时数据库或Cloud Firestore存储数据,则可以控制谁可以使用其服务器端安全规则访问此数据。并且在这些安全规则中,您可以确保只有您认识的用户才能访问数据。

例如,有关如何将实时数据库的访问权限限制为仅使用来自特定域How do I lock down Firebase Database to any user from a specific (email) domain?

的经过验证的电子邮件地址登录的用户的信息,请参见我的回答

这个问题可能也很方便,因为它显示了如何维护可以访问Cloud Firestore中的数据的允许电子邮件地址列表:Prevent user account creation with sign in by email in firestore