Есть ли способ не создавать нового пользователя и разрешать только существующим пользователям вход в систему с помощью firebase_auth, вход в Google? - PullRequest
0 голосов
/ 27 мая 2019

Мне бы хотелось, чтобы мое приложение аутентифицировало только ранее зарегистрированных пользователей, но не создавало новых пользователей.Я использую флаттер и Firebase Authentication.Я использую 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 голосов
/ 27 мая 2019

Нет способа предотвратить вход пользователя с помощью Firebase Authentication. Если поставщик включен, пользователи могут входить в систему с этим поставщиком.

Но вход в систему делает не более чем подтверждение своих полномочий. Если я вхожу в ваше приложение с учетной записью Google, все, что он делает, это доказывает, что я знаю учетные данные этой учетной записи Google.

Предоставление пользователю доступа к определенным ресурсам (так называемая авторизация) - это совершенно отдельный процесс, который зависит от вашего приложения. Например, если вы используете базу данных Firebase Realtime или Cloud Firestore для хранения данных, вы можете контролировать, кто может получить доступ к этим данным, с помощью их правил безопасности на стороне сервера. И в этих правилах безопасности вы можете гарантировать, что только пользователи, которых вы знаете, имеют доступ к данным.

Например, см. Мой ответ здесь, чтобы узнать, как ограничить доступ к базе данных в реальном времени для пользователей, выполняющих вход с подтвержденным адресом электронной почты из определенного домена: Как заблокировать базу данных Firebase для любого пользователя из определенного ( адрес электронной почты)?

Этот вопрос также может быть полезен, так как показывает, как вести список разрешенных адресов электронной почты, которые могут обращаться к данным в Cloud Firestore: Запретить создание учетной записи пользователя при входе по электронной почте в firestore .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...