我已经尝试阅读这个线程Firebase登录的授权错误列表,我也尝试过搜索,但我只能在这里找到管理员SDK身份验证错误
这些链接中的错误代码与Flutter应用的Firebase Auth的错误代码不同
我的意思是,我需要这里的错误代码
Future<void> signInUsingEmail({required String email, required String password}) async {
try {
await _auth.signInWithEmailAndPassword(email: email, password: password);
} on FirebaseAuthException catch (error) {
// I need the error.code in here
print(error.code);
}
我能知道所有可用的错误代码吗?这样我就可以用我自己的语言写我自己的错误信息了。就目前而言,我只能在下面捕捉到这些错误代码
- "请求太多">
- "错误的密码">
- "网络请求失败">
还有什么?
对于任何不喜欢点击链接的人:
使用电子邮件和密码登录
- 错误密码:如果密码对给定的电子邮件无效,或者与电子邮件对应的帐户没有设置密码,则抛出
- 无效电子邮件:如果电子邮件地址无效,则抛出
- 用户禁用:如果与给定电子邮件对应的用户已被禁用,则抛出
- 未找到用户:如果没有对应于给定电子邮件的用户,则抛出
createUserWithEmailAndPassword
- 电子邮件已在使用:如果已存在具有给定电子邮件地址的帐户,则抛出
- 无效电子邮件:如果电子邮件地址无效,则抛出
- 不允许执行操作:如果未启用电子邮件/密码帐户,则抛出。在Firebase控制台的"身份验证"选项卡下启用电子邮件/密码帐户
- 弱密码:如果密码不够强,则抛出
使用凭据登录
- 存在具有不同凭据的帐户:如果已经存在具有凭据声明的电子邮件地址的帐户,则抛出。通过调用fetchSignInMethodsForEmail,然后要求用户使用返回的提供程序之一登录来解决此问题。用户登录后,可以使用linkWithCredential将原始凭据链接到用户
- 无效凭据:如果凭据格式不正确或已过期,则抛出
- 不允许执行操作:如果未启用与凭据对应的帐户类型,则抛出。在Firebase控制台的"验证"选项卡下启用帐户类型
- 用户禁用:如果与给定凭据对应的用户已被禁用,则抛出
- 未找到用户:如果使用EmailAuthProvider.credential的凭据登录,并且没有与给定电子邮件对应的用户,则抛出
- 错误的密码:如果使用EmailAuthProvider.credential的凭据登录,并且密码对给定的电子邮件无效,或者如果与电子邮件对应的帐户没有设置密码,则抛出
- 无效验证码:如果凭据是PhoneAuthProvider.credential并且凭据的验证码无效,则抛出
- 无效的验证id:如果凭据是PhoneAuthProvider.credential并且凭据的验证id无效,则抛出
使用凭据重新验证
- 用户不匹配:如果给定的凭据与用户不一致,则抛出
- 未找到用户:如果给定的凭据与任何现有用户都不对应,则抛出
- 无效凭据:如果提供程序的凭据无效,则抛出。如果它在调用链接时已经过期,或者使用了无效的令牌,就会发生这种情况。请参阅提供程序的Firebase文档,并确保将正确的参数传递给凭据方法
- 无效电子邮件:如果EmailAuthProvider.credential中使用的电子邮件无效,则抛出
- 错误密码:如果EmailAuthProvider.credential中使用的密码不正确,或者与电子邮件关联的用户没有密码,则抛出
- 无效验证码:如果凭据是PhoneAuthProvider.credential并且凭据的验证码无效,则抛出
- 无效验证id:如果凭据是PhoneAuthProvider.credential并且凭据的验证id无效,则抛出
使用AuthProvider登录
- 用户禁用:如果与给定电子邮件对应的用户已被禁用,则抛出
匿名签名
不允许执行- 操作:如果未启用匿名帐户,则抛出。在Firebase控制台的"身份验证"选项卡下启用匿名帐户
使用电子邮件链接登录
- 过期操作代码:如果电子邮件链接中的OTP过期,则抛出
- 无效电子邮件:如果电子邮件地址无效,则抛出
- 用户禁用:如果与给定电子邮件对应的用户已被禁用,则抛出
对于Flutter的signInWithEmailAndPassword
方法,您将在firebase_auth
包文档中找到错误代码。
它们实际上与JS SDK相同:https://firebase.google.com/docs/reference/js/firebase.auth.Auth#error-codes_12(链接到Web档案中的文档)
所以我创建了这个要点它基本上是一些常见firebase身份验证异常的处理程序。
这是一个如何使用的例子
Future createUser(String email, String password) async {
try {
UserCredential customUserCredential = await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: email, password: password);
return customUserCredential.user!.uid;
} on FirebaseAuthException catch (authError) {
throw CustomAuthException(authError.code, authError.message!);
} catch (e) {
throw CustomException(errorMessage: "Unknown Error");
}
TextButton(
onPressed: () async {
try {
//final user = FirebaseAuth.instance.currentUser;
final email = _emailController.text;
final password = _passwordController.text;
// await FirebaseAuth.instance // final userCredential =
// .signInWithEmailAndPassword(
// email: email, password: password);
AuthService.firebase()
.logIn(email: email, password: password);
final user = AuthService.firebase().currentUser;
if (user?.isEmailVerified ?? false) {
Navigator.of(context).pushNamedAndRemoveUntil(
emailRoute, (route) => false);
} else {
Navigator.of(context)
.pushNamedAndRemoveUntil(noteRoute, (route) => false);
}
//devtools.log(userCredential.toString());
//This line of text may not work to print data
// print(userCredential.toString());
} on FirebaseAuthException catch (e) {
if (e.code == 'network-request-failed') {
showErrorDialog(context, 'No Internet Connection');
//devtools.log('No Internet Connection');
} else if (e.code == "wrong-password") {
return showErrorDialog(
context, 'Please Enter correct password');
//devtools.log('Please Enter correct password');
//print('Please Enter correct password');
} else if (e.code == 'user-not-found') {
showErrorDialog(context, 'Email not found');
// print('Email not found');
} else if (e.code == 'too-many-requests') {
return showErrorDialog(
context, 'Too many attempts please try later');
//print('Too many attempts please try later');
} else if (e.code == 'unknwon') {
showErrorDialog(
context, 'Email and password field are required');
//print('Email and password field are required');
} else if (e.code == 'unknown') {
showErrorDialog(
context, 'Email and Password Fields are required');
//print(e.code);
} else {
print(e.code);
}
}
},
child: const Text('Login')),