我在我的 Flutter 应用程序中使用 firebase 身份验证对用户进行身份验证,当用户输入正确的密码时,应用程序会正常显示主页但当密码错误时什么也没有发生,我想每次都显示警报用户输入了错误的密码,我该怎么办?
currentUser()
方法:
if (FirebaseAuth.instance.currentUser != null) {
// signed in
} else {
// signed out
}
这对我不起作用,所以这就是我所做的:
FirebaseAuth.instance.currentUser().then((firebaseUser){
if(firebaseUser == null)
{
//signed out
}
else{
//signed in
}
});
也许最短和最安全的答案是:
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)。
试试这个,它对我有用。
从用户那里获取令牌并刷新它。
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();
}
if (FirebaseAuth.instance.currentUser() != null) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Home(),
);
} else {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Welcome(),
);
}
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);
}
在您的初始化方法中执行此操作..
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()));
}
});