检查用户是不是登录 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 文档中的数组中