Firebase: Могу ли я узнать правило `ERROR_INVALID_EMAIL` перед входом? - PullRequest
1 голос
/ 11 июня 2019

Я реализовал regex для email format при локальной проверке, затем вызову firebase, войдите / зарегистрируйтесь в api, он вернет ERROR_INVALID_EMAIL, что означает, что предоставленный мною формат электронной почты не передается на сервер firebase.

Правило регулярного выражения электронной почты, которое я в настоящее время использую, принадлежит пабу валидаторы : код

Мой тестовый простой электронный адрес - aaa@aaa.a

RegExp _email = new RegExp(
    r"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$");
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:validators/validators.dart';

class AuthState extends ChangeNotifier {
  AuthState();

  // NOTE: maybe need to use FirebaseApp(appName) to replace default.
  final _auth = FirebaseAuth.instance;

  User _userFromFirebase(FirebaseUser user, {bool isJustSignUp = false}) {
    if (user == null) {
      return null;
    }
    return User(
      user.email,
      imgUrl: '',
    );
  }

  Future<User> getUser() async {
    var user = await _auth.currentUser();
    debugPrint('[+] -- $runtimeType: getUser:$user}');
    return _userFromFirebase(user);
  }

  Future<User> signInWithEmailPassword(String email, String password) async {
    try {
      FirebaseUser user = await _auth.signInWithEmailAndPassword(
        email: email,
        password: password,
      );
      return _userFromFirebase(user);
    } catch (error, stackTrace) {
      debugPrint(
          '[+] -- $runtimeType: signInWithEmailPassword: error:$error, stackTrace:$stackTrace');
      if (error.code == 'ERROR_USER_NOT_FOUND') {
        // Login with email not found: to signUp with email password.
        return _signUpWithEmailPassword(email, password);
      }
    }
  }

  Future<User> _signUpWithEmailPassword(String email, String password) async {
    try {
      FirebaseUser user = await _auth.createUserWithEmailAndPassword(
        email: email,
        password: password,
      );
      return _userFromFirebase(user, isJustSignUp: true);
    } catch (error, stackTrace) {
      debugPrint('error:$error, stackTrace:$stackTrace');
    }
  }

  bool emailValidation(String email) {
    if (email.isNotEmpty) {
      if (email.length > 30) {
        // assuem email length more then 30 will give false.
        return false;
      }
      return isEmail(email);
    }
    return false;
  }
}

class User {
  const User(
    this.email,{
    this.imgUrl ='',
  });

  final String email;
  final String imgUrl;
}

Что я хотел бы сделать, это получить эту ошибку до того, как пользователь нажмет на кнопку, это возможно?

  • Я просто не могу найти правило по тексту или регулярному выражению.
  • Или есть способ проверить электронную почту только на наличие firebase api?

1 Ответ

0 голосов
/ 11 июня 2019

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

^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...