Firebase身份验证在卸载应用程序并再次安装时返回特定用户

时间:2018-02-07 09:35:14

标签: java android firebase firebase-authentication

我有一个问题,我使用谷歌登录我的应用程序+ Firebase。

假设有3个用户X,Y and Z,我在一个时间点登录我的应用程序。

我是否登录了用于检查用户的代码:

FirebaseAuth mAuth = FirebaseAuth.getInstance();
FirebaseUser currentUser = mAuth.getCurrentUser();

if(currentUser!=null)
   {
     //user logged in and get user detail from currentUser and go to HomePage
   }
 else{
    //Show sign in button
   }

场景: 我用多个帐户签名并注销。一切正常。

但是当我删除应用程序并再次安装它时。 Y用户自动返回mAuth.getCurrentUser()

我尝试使用X登录并卸载应用程序。 不过,如果我再次安装它,它会直接将我带到Y用户。

我尝试使用Z登录并卸载应用程序。 不过,如果我再次安装它,它会直接将我带到Y用户。

我甚至尝试登出并删除该应用程序。如果我安装,它会再次返回Y用户,甚至不需要登录。

注意:我没有清除缓存或数据。如果我这样做,一切正常。

问题只是取消了应用程序。

原因是什么?

1 个答案:

答案 0 :(得分:0)

来自文档:

  

当用户注册或登录时,该用户将成为Auth实例的当前用户。 Firebase Auth实例会保留用户的状态,因此刷新页面(在浏览器中)或重新启动应用程序不会丢失用户的信息。

     

当用户注销时,Auth实例停止保持对User对象的引用,并且不再保持其状态;目前没有用户。但是,用户实例仍然完全正常运行:如果您保留对它的引用,您仍然可以访问和更新用户的数据。

因此,要解决此问题,最好的方法是创建一个按钮并注销用户。这样,当您重新启动应用程序时,用户将不会登录。

FirebaseAuth.getInstance().signOut();

此处有更多信息:https://firebase.google.com/docs/auth/users

此问题也与ios有关(但同样的想法):Firebase - Deleting and reinstalling app does not un-authenticate a user

其他一些替代方案:

在清单android:allowBackup="false"中添加<application>

机器人:allowBackup

  

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

将此作为测试:

  1. 删除缓存和数据
  2. 使用用户Y登录并注销
  3. 使用用户X登录并注销
  4. 卸载应用程序
  5. 使用用户X安装应用程序登录。
  6. 退出时FirebaseAuth.getInstance().signOut();非常重要。