dart 电子邮件地址格式错误Firebase(Flutter)[关闭]

utugiqy6  于 2023-07-31  发布在  Flutter
关注(0)|答案(1)|浏览(161)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
17天前关闭
Improve this question
我已经阅读了这里所有的相关帖子和答案,还没有找到适合自己的解决方案。我有几个电子邮件和密码验证类,也有字符和密码长度验证,我可以成功注册一个新用户,但我不能登录到新注册用户的电子邮件和密码下的帐户,因为我得到这个错误:Initial task failed for action RecaptchaAction(action=signInWithPassword)with exception - The email address is badly formatted.还使用了print,我检查了输入到函数并转移到firebase时,试图登录,我发现没有多余的空格,不正确的字符等.我的代码看起来像这样:

class Validator {
  final _emailRules =
  RegExp(r'^[\w-]+(\.[\w-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,})$');
  final _passwordRules = RegExp(r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$');

  String validateEmail(String email) {
    if (email.isEmpty) {
      return 'Email cannot be empty';
    } else if (!_emailRules.hasMatch(email)) {
      return 'Please enter a valid email';
    }
    return '';
  }

  String validatePassword(String password) {
    if (password.isEmpty) {
      return 'Password cannot be empty';
    } else if (!_passwordRules.hasMatch(password)) {
      return 'Password should be 8 digit, uppercase letters';
    }
    return '';
  }
}

字符串
登录方法:

Future<User?> signInUser(String email, String password) async {
    UserCredential userCredential = await _firebase.signInWithEmailAndPassword(
        email: email.trim(), password: password.trim());
    User? user = userCredential.user;
    if (user != null) {
      String token = await user.getIdToken();
      await storage.write(key: 'token', value: token);
    }
    return user;
  }


检查密码/电子邮件输入是否正确

bool _validateFields(BuildContext context) {
    String emailError = Validator().validateEmail(_emailController.text);
    String passwordError = Validator().validatePassword(_passwordController.text);

    if (emailError.isNotEmpty) {
      showSnackBarError(context, emailError);
      return false;
    }

    if (passwordError.isNotEmpty) {
      showSnackBarError(context, passwordError);
      return false;
    }

    return true;
  }


至少发送到Firebase电子邮件/密码的代码块:

SizedBox(
              width: double.infinity,
              child: OutlinedButton(
                onPressed: () {
                  if (_validateFields(context)) {
                    String email = _emailController.text.trim();
                    String password = _passwordController.text;
                    BlocProvider.of<AuthBloc>(context).add(
                      SignInEvent(email: email, password: password),
                    );
                    print(email);
                    print(password);
                  }
                },
                child: const Text('Sign In'),
              ),
            )


但是我在signIn方法中使用了电子邮件/密码的硬编码值(以前在Firebase中添加了它),它工作得非常好。

编辑:我找到了解决方案,我很笨。我把密码和登录的地方弄混了,我指的是signInUser。我所要做的就是解决这个问题,它起作用了。这是最后的决定

userSignIn = await fireBaseService.signInUser(
           event.password, event.email);

但应该是最终的

userSignIn = await fireBaseService.signInUser(
            event.email, event.password);

ru9i0ody

ru9i0ody1#

该错误基本上意味着输入的电子邮件不是firebase接受的正确格式。
正如上面的评论所建议的,在发送电子邮件到firebase之前添加一个断点,并打印电子邮件值。
我想补充的另一个小建议是使用一个名为email_validator的包来验证您的电子邮件。我从来没有担心验证电子邮件,只是使用这个包。
P.S.如果验证器工作正常,那么您将不再需要修剪值。
以下是电子邮件验证器的简单用法:

TextFormField(
...
validator: (value){
 if (EmailValidator.validate(value!)) { 
  return null;
  } else {
  return "Please enter a valid email";
  }
},
...
),

字符串
希望这对你有帮助!

相关问题