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】:

尝试将awaitcatch/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 数据库权限被拒绝

在 Flutter 上使用电子邮件和密码进行 Firebase 身份验证的示例?

通过 Facebook 进行 Flutter 和 Firebase 身份验证:与设备的连接丢失