【问题标题】:Flutter Firebase Auth Anonymous currentUser() returns nullFlutter Firebase Auth Anonymous currentUser() 返回 null
【发布时间】:2020-06-24 06:59:18
【问题描述】:

我们已经开发并测试了一个 Flutter 应用。一切都按预期工作。我们将应用部署到商店并获得了一些用户。

几个月后,我们收到了用户的投诉,称他们在打开应用时丢失了所有数据。

我相信数据没有丢失,只是他们的匿名帐户更改为新的匿名帐户。

丢失数据的用户有什么共同点:

  • iOS 设备(不确定是否相关),
  • 至少几天没有使用该应用。

我们的用户身份验证流程:

  • 应用启动,
  • 所有服务都在main()方法中初始化,
  • AuthService初始化final _auth = FirebaseAuth.instance;并调用loginUser(),
  • loginUser() 方法执行:
void loginUser() async {
  FirebaseUser user = await _auth.currentUser();

  if (user == null) {
    AuthResult result = await _auth.signInAnonymously();
    user = result.user;
  }

  IdTokenResult userToken = await user.getIdToken();
  print('USER');
  print('    UID: ${user.uid}');
  print('    Token: ${userToken.token}');
  print('    Expires: ${userToken.expirationTime}');
}

我们正在使用版本:

  • flutter: v1.12.13+hotfix.7
  • firebase_core: ^0.4.0+8
  • firebase_auth: ^0.14.0+5

注册用户没有遇到任何问题。

问题:

  • this._auth.currentUser() 在什么情况下会返回 null?
  • 匿名帐户是否有到期日?
  • 有没有办法重现此问题?
  • 有人遇到过同样的问题吗?
  • 我们做错了什么?
  • 如何避免匿名用户出现这种情况?

【问题讨论】:

    标签: ios firebase flutter firebase-authentication


    【解决方案1】:
    • 在什么情况下 this._auth.currentUser() 会返回 null?

    根据文档,currentUser() 应该只在没有登录用户的情况下返回 null。

    • 匿名帐户是否有到期日?

    我在文档上找不到这个,我建议你联系 Firebase 支持,他们通常会在 2 天内回复你的联系方式。

    • 有没有办法重现此问题?

    我不这么认为,您可以尝试以匿名用户身份登录并等待一段时间后它是否停止工作,但这可能需要耐心和大量时间。也许您知道用户的创建日期,以便您可以估计帐户消失的主要时间?

    • 有人遇到过同样的问题吗?

    我不使用匿名用户。

    • 我们做错了什么?
    • 如何避免匿名用户出现这种情况?

    我猜匿名用户不应该长时间使用,如果你想持久化你的用户数据,你应该upgrade them to a permanent account。但 Firebase 支持应该为您进一步澄清这一点。

    【讨论】:

      【解决方案2】:

      只是扩展@mFeinstein 的回答

      匿名身份验证令牌被持久化到磁盘并且仅在再次调用signInAnonymously 时重新生成。如果不看具体的实现,很难说,但可能存在一些次要问题,导致在调用currentUser() 时返回 null 导致生成新的匿名用户 ID。

      如何避免匿名用户出现这种情况?

      • 不使用匿名登录,而是使用自定义身份验证提供程序登录,并将生成的令牌存储在钥匙串中,加密,以便备份到 iCloud。

      可以在此处找到有关自定义提供程序身份验证的更多信息:https://firebase.google.com/docs/auth/ios/custom-auth

      【讨论】:

        猜你喜欢
        • 2018-10-30
        • 2017-11-26
        • 2021-03-21
        • 2019-08-05
        • 2018-08-19
        • 2021-09-28
        • 1970-01-01
        • 2022-01-16
        • 2019-04-12
        相关资源
        最近更新 更多