检查用户是不是登录 Flutter & firebase auth |

Posted

技术标签:

【中文标题】检查用户是不是登录 Flutter & firebase auth |【英文标题】:Check if the user is logged in Flutter & firebase auth |检查用户是否登录 Flutter & firebase auth | 【发布时间】:2018-11-15 17:44:15 【问题描述】:

我在我的 Flutter 应用程序中使用 firebase 身份验证来验证用户身份,当用户输入正确的密码时,应用程序会正常显示主页但是当密码错误时没有发生任何事情,我想显示警报每次用户输入错误的密码,怎么办?

【问题讨论】:

检查当前用户是否为!= null @GünterZöchbauer 你能写下所有代码吗 编写您的代码,以便我们知道您在使用什么 【参考方案1】:

使用currentUser() 方法:

if (await FirebaseAuth.instance.currentUser() != null) 
    // signed in
 else 


【讨论】:

这对我不起作用,可能是因为 currentUser 返回了一个未来,它不为空,并且总是让应用程序认为用户已登录。使用 await 或 .then 可以实际获取用户对象而不是未来。 这个答案不正确 FirebaseAuth.instance.currentUser() 在 firebase_auth 插件 0.11.0 中是异步的,也许在过去它是同步的 您可以随时使用if (await FirebaseAuth.instance.currentUser() == null) nullsafety 问题...error: The function can't be unconditionally invoked because it can be 'null'【参考方案2】:

这对我不起作用,所以这就是我所做的:

FirebaseAuth.instance.currentUser().then((firebaseUser)
  if(firebaseUser == null)
   
     //signed out
   
   else
    //signed in
  
);

【讨论】:

对我不起作用。 Firebase 用户即使被删除也始终有效。 @OliverDixon 我遇到了完全相同的问题。你找到解决办法了吗?【参考方案3】:

试试这个,它对我有用。

从用户那里获取令牌并刷新它。

Future<bool> isUserLogged() async 
    FirebaseUser firebaseUser = await getLoggedFirebaseUser();
    if (firebaseUser != null) 
        IdTokenResult tokenResult = await firebaseUser.getIdToken(refresh: true);
        return tokenResult.token != null;
     else 
        return false;
    


Future<FirebaseUser> getLoggedFirebaseUser() 
    return firebaseAuthInstance().currentUser();

【讨论】:

在回答一个老问题时,如果您包含一些上下文来解释您的答案如何提供帮助,那么您的答案将对其他 *** 用户更有用。请参阅:How do I write a good answer。【参考方案4】:
if (FirebaseAuth.instance.currentUser() != null) 
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Home(),
    );
 else 
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Welcome(),
    );

【讨论】:

请避免将代码单独作为答案,并尝试解释它如何解决问题。【参考方案5】:

也许最短和最安全的答案是:

if(FirebaseAuth.instance.currentUser?.uid == null)
// not logged
 else 
// logged

它获取记录在Firebase身份验证UID字段中的用户ID(如果存在),每个用户之前已经在应用程序上进行了身份验证,否则返回null。currentUser?.uid中的问号是Null安全避免空异常(如果为空则返回空)。

【讨论】:

【参考方案6】:

void _emailLogin() 异步 最终用户 = await _auth.signInWithEmailAndPassword(email: email, password: password);

    if(user != null)
     // Do something
    
   catch (e) 

    String exception = Auth.getExceptionText(e);
    Flushbar(
      title: "Sign In Error",
      message: exception,
      duration: Duration(seconds: 5),
    )..show(context);

  

【讨论】:

【参考方案7】:

在您的初始化方法中执行此操作..

 FirebaseAuth.instance.currentUser().then((firebaseUser) 
    if (firebaseUser == null) 
     
      Navigator.pushReplacement(
          context,
          MaterialPageRoute(
              builder: (BuildContext context) => LoginPage()));
     else 
      Navigator.pushReplacement(context,
          MaterialPageRoute(builder: (BuildContext context) => HomePage()));
    
  );

【讨论】:

以上是关于检查用户是不是登录 Flutter & firebase auth |的主要内容,如果未能解决你的问题,请参考以下文章

当用户在flutter中使用otp方法登录时,如何检查用户详细信息是不是已经存在于firebase中? [复制]

在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户

实时获取当前登录用户的数据 - Flutter & Firestore

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

在 URL 参数中传递用户名和密码 (Dart & Flutter)

如何检查用户是不是已使用 Google Sign in 和 Firebase Auth 登录以检索他们的数据?