Flutter Firebase 身份验证和/或登录不成功
Posted
技术标签:
【中文标题】Flutter Firebase 身份验证和/或登录不成功【英文标题】:Flutter Firebase Authentication and/or Login is not Successful 【发布时间】:2022-01-15 14:52:06 【问题描述】:火力基地 身份验证:电子邮件/密码已设置为启用。 实时数据库:存在用户记录。 电子邮件和密码:经过彻底检查并验证正确。
下面是这个问题的代码;
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
void loginAndAuthenticateUser(BuildContext context) async
final User? firebaseUser = (await _firebaseAuth
.signInWithEmailAndPassword(
email: emailTextEditingController.text,
password: passwordTextEditingController.text
).catchError((errMsg)
displayToastMessage("Error: " + errMsg.toString(), context);
)).user;
if(firebaseUser !=null)
userRef.child(firebaseUser.uid).once().then((value) => (DataSnapshot snap)
if(snap.value != null)
Navigator.pushNamedAndRemoveUntil(context, MainScreen.idScreen, (route) => false);
displayToastMessage("Login successful", context);
else
_firebaseAuth.signOut();
displayToastMessage("No records exist. Please create new account", context);
);
else
displayToastMessage("Error: Cannot be signed in", context);
【问题讨论】:
您能分享任何错误消息或日志吗? 这是执行 loginAndAuthenticateUser 方法时的日志; W/System(4611):忽略标头 X-Firebase-Locale,因为它的值为 null。 W/System(4611):忽略标头 X-Firebase-Locale,因为它的值为 null。 D/FirebaseAuth(4611):通知 id 令牌侦听器有关用户 (ksYHlmLvGSMK4VjlRDnNrzyIXj83)。 D/FirebaseAuth(4611):通知有关用户的身份验证状态侦听器 (ksYHlmLvGSMK4VjlRDnNrzyIXj83)。没有错误消息。但我希望如果登录和身份验证成功,屏幕将转到 MainScreen(来自 LoginScreen)。 【参考方案1】:尝试将await
与catch/try
一起使用,而不是与.then/.catchError
语法混合使用(我不知道userRef
到底是什么,取决于它可能需要调整数据库查询):
try
UserCredential userCredential = await _firebaseAuth
.signInWithEmailAndPassword(
email: emailTextEditingController.text,
password: passwordTextEditingController.text);
final User? firebaseUser = userCredential.user;
if (firebaseUser != null)
final DatabaseEvent event = await
userRef.child(firebaseUser.uid).once();
if (event.snapshot.value != null)
Navigator.pushNamedAndRemoveUntil(context, MainScreen.idScreen,
(route) => false);
displayToastMessage("Login successful", context);
else
displayToastMessage("No records exist. Please create new account",
context);
await _firebaseAuth.signOut();
else
displayToastMessage("Error: Cannot be signed in", context);
catch(e)
// handle error
【讨论】:
非常感谢这个代码对我有用。 很高兴听到,不客气。以上是关于Flutter Firebase 身份验证和/或登录不成功的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Flutter 和 Firebase 设置 Facebook 身份验证
Flutter bloc 和 Firebase 电话身份验证
Flutter 设备预览和 Firebase 身份验证不兼容
成功身份验证后,Flutter Firebase 数据库权限被拒绝