web-dev-qa-db-fra.com

Effacer la persistance de la base de feu après la déconnexion

  1. Existe-t-il un moyen d'effacer les données stockées dans base de données Firebase persistance activée via setPersistenceEnabled(true)?
  2. Ou éventuellement empêcher l'accès en lecture aux données des utilisateurs précédemment stockées sur l'appareil?
  3. Et une question supplémentaire - existe-t-il un moyen de vérifier si des données sont en attente de synchronisation?

Dans mon application, je veux effacer la base de données lorsque l'utilisateur se déconnecte et il confirme que les modifications non synchronisées seront supprimées. Cette application sera utilisée sur tablette par de nombreuses personnes, et il y aura de nombreuses données stockées par utilisateur, donc Je veux effacer les données inutiles stockées sur l'appareil à:

  • réduire l'utilisation du stockage
  • empêcher une personne non autorisée de lire les données des utilisateurs

C'est une faille de sécurité car tout utilisateur, qu'il soit connecté ou non, a un accès en lecture à toutes les données précédemment téléchargées! Heureusement, nous n'avons pas écrit y accéder.

J'ai essayé de supprimer db par moi-même, en mode hors ligne et en ligne, mais les données persistent sur l'appareil:

// first clear all data on my own
FirebaseDatabase db = FirebaseDatabase.getInstance();
db.goOffline(); // even when I clear db in online mode data persist on mobile device
db.getReference().setValue(null);

// and then logout
FirebaseAuth.getInstance().signOut();
db.goOnline();

ex. structure des données:

{
  "someList": {
    "userId1": {
      "itemId11": {
        "name": "name 11"
      },
      "itemId12": {
        "name": "name 12"
      },
      ...
      "itemId1N": {
        "name": "name 1N"
      }
    }
    "userId2": {
      "itemId21": {
        "name": "name 21"
      },
      "itemId22": {
        "name": "name 22"
      },
      ...
      "itemId2N": {
        "name": "name 2N"
      }
    }
  }
}

mes règles:

{
  "rules": {
    ".read": "false",
    ".write": "false",
    "someList": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}
27
sosite

clearPersistence() a été lancé en v6.2. .

via

https://github.com/firebase/firebase-js-sdk/issues/449

1
Jimmy Kane

Malheureusement, il n'existe aucun moyen pris en charge pour effacer le cache de persistance. Vous pouvez essayer de supprimer manuellement la base de données SQLite utilisée par la base de données Firebase (devrait être sous /databases/ dans le dossier de données de votre application), mais vous devez le faire avant d'initialiser la base de données Firebase, vous devrez donc forcer l'application à redémarrer après avoir déconnecté quelqu'un ou similaire.

Concernant savoir s'il y a des "données en attente de synchronisation", en supposant que vous parlez d'écritures, la seule façon est d'attacher CompletionListeners à chaque opération d'écriture que vous effectuez et d'attendre qu'elles se terminent.

Nous souhaitons améliorer ces deux éléments dans les futures versions du SDK Firebase Database.

11
Michael Lehenbauer
    if (Build.VERSION_CODES.KitKat <= Build.VERSION.SDK_INT) {
        ((ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE))
                .clearApplicationUserData();
    }

source

2
Mario Campos