繁体   English   中英

Firebase 身份验证失败,安全性为 null

[英]Firebase Auth failing with null safety

我有一个 Firebase 授权登录 function,我不得不更改一些代码以允许null safety

Auth function 的这个特定部分被证明是棘手的

Future<String> getCurrentUser() async {
    User? user = await _firebaseAuth.currentUser;
    return user!.uid;
  }

在我运行之前,我的代码没有错误。 然后它在return语句上失败,其中Null check operator used on a null value

这是当没有用户登录时,因此没有当前用户可返回。

我必须安全地安装 null 但在这样做时 null 检查正在完成它的工作,看到没有当前用户并且失败。

然后我可以在模拟器上按“播放”,代码在 sim 上运行良好,但在生产中这不起作用,需要修复。

当我在没有用户登录的情况下再次按下重新启动时,它失败了,按下“播放”似乎让它很开心,尽管只返回了null ,但它工作正常。

有办法解决这个问题吗? 我试过if但我仍然需要return user.;uid; 在最后

任何帮助表示赞赏,谢谢

所有应用程序的理想实现是使用authStateChanges()来使用身份验证 state 观察器。 只要知道用户已完全登录或注销,这就会给您一个回调。 这将使您可以根据 state 调整您的 UI。正确实施后,这将为您提供一种立即响应用户 state 的方法,并且如果用户 object 之前已登录并且还会为您提供用户 object 首先可用的时刻刚刚再次启动该应用程序。

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

要清楚:不要使用 currentUser,除非您只需要快速检查用户在 state 中的登录。最好听取随时间的变化并在它们发生时做出响应。

如果用户是 null,您可以返回一个空字符串。

Future<String> getCurrentUser() async {
    User? user = await _firebaseAuth.currentUser;
    if(user != null){
      return user!.uid;
    } else {
      return "";
    }
  }

然后当你调用你的方法时,你可以检查结果是否为空:

String userId = await getCurrentUser();
if(userId != ""){
  // Do stuff when user is logged in
} else{
  // Do stuff when user is not logged in
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM