Я создал экран входа в систему и регистрации, который работает с моим приложением 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
, хотя я не уверен, как это реализовать здесь. Буду признателен за любую помощь. Спасибо!