Подтвердите адрес электронной почты пользователя перед подтверждением регистрации с помощью Flutter и Firebase - PullRequest
0 голосов
/ 18 февраля 2020

Я создал экран входа в систему и регистрации, который работает с моим приложением Flutter, используя Firebase в качестве службы аутентификации бэкэнда. Я могу переключаться между экранами входа в систему, регистрации и сброса пароля.

Проблема

На данный момент экран регистрации принимает любой адрес электронной почты, который является введено, действительно ли это или нет. Например, если бы я набрал gvevg@gverwbgw.com, это позволило бы пользователю зарегистрироваться. Это, очевидно, проблема, когда речь идет о фальшивых аккаунтах и ​​спаме и т. Д. c.

Цель

Я бы хотел иметь возможность редактировать свой код , для автоматического создания электронного письма с подтверждением адреса электронной почты, которое не позволяет пользователю войти в систему до того, как его адрес электронной почты будет проверен. Код, который я сделал, использует Future, FirebaseAuth и async/await, чтобы это произошло.

Мой текущий код

Во-первых, я определяю абстрактный класс AuthBase, который создает функцию 'createUserWithEmailAndPassword' (среди прочего) следующим образом:

abstract class AuthBase {
  Stream<User> get onAuthStateChanged;
  Future<User> currentUser();
  Future<User> createUserWithEmailAndPassword(String email, String password);
}

Затем я создаю функцию Auth, которая реализует AuthBase, получает текущего пользователя из Firebase и создает функцию регистрации Future следующим образом:

class Auth implements AuthBase {
  final _firebaseAuth = FirebaseAuth.instance;

  // This creates the user ID token variable (if one doesn't already exist) which is then populated using one of the login methods.
  User _userFromFirebase(FirebaseUser user) {
    if (user == null) {
      return null;
    }
    return User(uid: user.uid);
  }

  // This helps to get the user from Google Firebase, noting if there is or isn't a user with those login details already.
  @override
  Stream<User> get onAuthStateChanged {
    return _firebaseAuth.onAuthStateChanged.map(_userFromFirebase);
  }

  // This identifies the current user, who is logged in at the time.
  @override
  Future<User> currentUser() async {
    final user = await _firebaseAuth.currentUser();
    return _userFromFirebase(user);
  }

  // This creates the user account for an email-and-password sign-in, with firebase, if it doesn't already exist.
  @override
  Future<User> createUserWithEmailAndPassword(
      String email, String password) async {
    final authResult = await _firebaseAuth.createUserWithEmailAndPassword(
        email: email, password: password);
    return _userFromFirebase(authResult.user);
  }
}

Мой вопрос

Как мне отредактировать мой код, чтобы он позволял мне автоматически выполнять проверку электронной почты для любого пользователя, который хочет войти с электронной почтой? Я считаю, что функция sendEmailVerification() должна использовать FirebaseUser, хотя я не уверен, как это реализовать здесь. Буду признателен за любую помощь. Спасибо!

1 Ответ

1 голос
/ 18 февраля 2020

Проверка подлинности электронной почты + пароля не требует ничего, кроме того, что пользователь знает комбинацию электронной почты + пароль. Сам по себе он не требует проверки адреса электронной почты для входа. Если вы хотите, чтобы адрес электронной почты был проверен перед тем, как разрешить доступ к другим данным, вы можете сделать это, проверив токен пользователя на email_verified требование , например, в правилах безопасности вашей базы данных.

См. также:

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