Подтверждение электронной почты с использованием базы данных в реальном времени Flutter - PullRequest
0 голосов
/ 16 октября 2019

[решено] Я нашел много примеров того, как отправлять подтверждение по электронной почте пользователю, чтобы использовать приложение, но все они используют CloudFirestore, который мне совсем не помогает. В моем случае функции SignUp и входа в систему работают должным образом, но я хочу реализовать функцию проверки электронной почты, так как в данный момент пользователь может поместить любую электронную почту, которую он / она хочет, не имеет значения, существует она или нет, и все еще сможетвойти и использовать приложение. Я хочу избежать этого. Это мой код для регистрации и входа в систему:

 Future<Map<String, dynamic>> signUp(String email, String password) async {
_isLoading = true;
notifyListeners();

const url =
    'https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=';
final Map<String, dynamic> authData = {
  'email': email,
  'password': password,
  'returnSecureToken': true
};
final http.Response response = await http.post(url,
    body: json.encode(authData),
    headers: {'Content-Type': 'application/json'});
final Map<String, dynamic> responseData = json.decode(response.body);
bool hasError = true;
String message = 'Something went wrong!';
if (responseData.containsKey('idToken')) {
  hasError = false;
  message = 'Authentication succeeded!';
  _authenticatedUser = User(
      id: responseData['localId'],
      email: email,
      token: responseData['idToken']);

  setAuthTimeout(int.parse(responseData['expiresIn']));
  _userSubject.add(true);
  final DateTime now = DateTime.now();
  final DateTime expiryTime =
      now.add(Duration(seconds: int.parse(responseData['expiresIn'])));
  //SAVING OF THE TOKEN ON THE DEVICE
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('token', responseData['idToken']);
  prefs.setString('userEmail', email);
  prefs.setString('userId', responseData['localId']);
  prefs.setString('expiryTime', expiryTime.toIso8601String());
} else if (responseData['error']['message'] == 'EMAIL_EXISTS') {
  message = 'This email already exists.';
}

_isLoading = false;
notifyListeners();
return {'success': !hasError, 'message': message};

}

Код для функции входа в систему практически одинаков, отличается только URL-ссылка. ('https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=') Я удалил здесь номер ключа bcs по соображениям безопасности. Любая помощь будет очень признательна!

...