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

问题描述 投票:0回答:7

我在我的 Flutter 应用程序中使用 firebase 身份验证对用户进行身份验证,当用户输入正确的密码时,应用程序会正常显示主页但当密码错误时什么也没有发生,我想每次都显示警报用户输入了错误的密码,我该怎么办?

firebase dart flutter
7个回答
34
投票

使用

currentUser()
方法:

if (FirebaseAuth.instance.currentUser != null) {
    // signed in
} else {
   // signed out   
}

14
投票

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

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

5
投票

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

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

它获取记录在 Firebase Authentication UID 字段上的用户 ID(如果存在),因为每个用户之前已经在应用程序上进行过身份验证,否则返回 null。

currentUser?.uid
中的问号是 Null safety to avoid null exception (如果为 null,则返回 null)。


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();
}

1
投票
if (FirebaseAuth.instance.currentUser() != null) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Home(),
    );
} else {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Welcome(),
    );
}

0
投票

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);

  }

0
投票

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

 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()));
    }
  });
© www.soinside.com 2019 - 2024. All rights reserved.