【问题标题】:Firebase Auth saved after uninstall. How can I delete it?卸载后保存 Firebase 身份验证。我怎样才能删除它?
【发布时间】:2018-10-19 19:10:25
【问题描述】:

我最近发现,即使在我的应用被卸载后,Firebase 身份验证也会将自己保存在设备上。我不知道如何删除这个旧的 Auth 信息。

我不希望用户在卸载并重新安装应用后仍处于登录状态。如果除了我自己测试我期望在同一设备上“干净安装”之外没有其他原因。

我知道捕获卸载事件没有简单的方法,因此我想在首次启动时清除所有潜在的旧 Auth 信息。

所以我添加了代码(似乎工作正常)来检查这是否是第一次启动:

Boolean firstRun = prefs.getBoolean("firstrun", true);
if (firstRun) {
    // delete everything an old user could have left behind
    // ==> This is where I need help <==
    prefs.edit().putBoolean("firstrun", false).apply();
} else {
    // move along, not the first launch
}

我尝试过(不成功):

FirebaseAuth authData = FirebaseAuth.getInstance();  
authData.signOut();

这些电话似乎也是 iOS 相关问题中的建议,但我无法应用它的智慧: Firebase - Deleting and reinstalling app does not un-authenticate a user

即使在致电signOut() 之后,该应用程序仍然让我使用旧帐户登录!

我的“注销”按钮使用FirebaseAuth.getInstance().signOut(); 并且有效。 卸载后保存的这个“旧”Auth 实例有什么奇怪的(拥有?),它不会死

特别是当我从 Android Studio 卸载然后安装/运行时:

  1. 一开始 authData 和 currentUser 都不为空
  2. 我调用上面的代码,试图摆脱这个老用户
  3. 3 毫秒后(在我调用它之后立即 代码)它们仍然不是 NULL。
  4. 再过 2 毫秒,currentUser 为 NULL(是吗?)
  5. 又过了 71 毫秒...仍然为空(到目前为止一切正常)
  6. 不到一秒钟...我以旧用户身份登录?!这怎么可能?

在身份验证下的 Firebase 控制台中,此帐户显示为 6 天前最后一次登录。所以它不会以某种方式重新登录。

有人知道如何从设备中删除 FirebaseAuth 数据吗?我不想“删除”用户帐户,只需从该设备上删除它的所有痕迹即可。

奇怪的是,我一直无意登录的帐户甚至不是在此设备上登录我的应用程序的最后一个帐户。这在过去从来都不是问题(因此我什至不知道 Firebase 在卸载后保存了身份验证)。所以看起来 Auth 信息在卸载后并未始终保存...但是一旦发生就无法删除?

非常感谢任何帮助!

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    在清单中的&lt;application&gt; 中添加android:allowBackup="false"

    来自文档:

    android:allowBackup

    是否允许应用程序参与备份和恢复基础架构。如果此属性设置为 false,则不会执行应用程序的备份或恢复,即使是全系统备份也会导致所有应用程序数据通过 adb 保存。该属性的默认值为 true。

    【讨论】:

    • 有趣。我有点担心删除此备份可能会对更多用户产生负面影响,而不是卸载并重新安装后自动登录时遇到的问题......
    • 将 allowBackup 设置为 false 是否意味着当用户选择将其所有旧应用安装到新设备上时,我的应用将不包括在内?
    • 这句话来自 developer.android 似乎有点令人困惑。我不确定full-system backup 是什么,我也不确定将allowBackup 设置为true 会产生什么影响。我正在寻找,但经过几次尝试,找不到任何东西。但是,答案解决了我的问题,如果 @KaitlynHanrahan 发生同样的情况,答案应该是正确的。
    【解决方案2】:

    也试试 FirebaseAuth.getInstance().getCurrentUser().delete

    【讨论】:

      【解决方案3】:

      Firebase 以共享首选项存储身份验证信息,文件名以“com.google.firebase.auth.api.”开头。因此,如果您在注销流程中删除这些文件,这将有助于达到目的。

      public void clearFirebaseAuthInfo(Context ctx)
          {
              File dir = new File(ctx.getFilesDir().getParent() + "/shared_prefs/");
              String[] children = dir.list();
              for (int i = 0; i < children.length; i++)
              {
                  if(children[i].contains("com.google.firebase.auth.api."))
                  {
                      new File(dir, children[i]).delete();
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 2022-01-19
        相关资源
        最近更新 更多