**已关闭。**此问题为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);
型
1条答案
按热度按时间ru9i0ody1#
该错误基本上意味着输入的电子邮件不是firebase接受的正确格式。
正如上面的评论所建议的,在发送电子邮件到firebase之前添加一个断点,并打印电子邮件值。
我想补充的另一个小建议是使用一个名为email_validator的包来验证您的电子邮件。我从来没有担心验证电子邮件,只是使用这个包。
P.S.如果验证器工作正常,那么您将不再需要修剪值。
以下是电子邮件验证器的简单用法:
字符串
希望这对你有帮助!