我有一个问题,我使用谷歌登录我的应用程序+ 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
用户,甚至不需要登录。
注意:我没有清除缓存或数据。如果我这样做,一切正常。
问题只是取消了应用程序。
原因是什么?
答案 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。
将此作为测试:
退出时FirebaseAuth.getInstance().signOut();
非常重要。