Verhindern, dass Elemente im Bereich in die Datensätze eines anderen Benutzers geschrieben werden

Ich hatte Erfolg mit AngularFire in einem Szenario, in dem sich ein Benutzer in meiner Anwendung befindet.

Nachdem ich die Authentifizierung eingerichtet und ausgeführt habe, bemerke ich diese Zuweisungitems zu$scope.items ist katastrophal beim Benutzerwechsel, vor allem aufgrund der$scope Fehler beim Aktualisieren.

Direkt aus den Dokumenten lesen ...

var ref = new Firebase('https://<my-firebase>.firebaseio.com/items');
angularFire(ref, $scope, 'items');

Ich brauche diese, um nur die zu seinitems des aktuell berechtigten Benutzers. Momentan mache ich das (wenn es einen besseren Weg gibt, zögere nicht, es mir zu sagen!)

var ref = new Firebase('https://<my-firebase>.firebaseio.com/items/userId');
angularFire(ref, $scope, 'items');

Ich generiereuserId mitauth.provider undauth.idübrigens. Jetzt, da meine Artikel mit einem Namensraum versehen sind (sagen wir mal)user1

var ref = new Firebase('https://<my-firebase>.firebaseio.com/items/[user1id]');
angularFire(ref, $scope, 'items');

Ich füge Artikel hinzu$scope.items

$scope.create = function(item) {

  $scope.items.push(item)
  /* Pretend the user adds these from the interface.
  [
    { name: 'eenie' },
    { name: 'meenie' },
    { name: 'miney' },
    { name: 'moe' }
  ]
  */

}

Das Problem

Nun, wenn ich mich nur abmelde und als jemand anderes anmelde, hat dieser Benutzer es magischeenie meenie miney undmoe da$scope.items hielt das Array zwischen Logout und Login.

Ich habe versucht zu setzen$scope.items = [] beim Abmelden, aber das leert tatsächlich alle Datensätze. Ich ziehe mir die Haare aus. Dies ist 0,001% von dem, was ich in meinem Projekt tun muss und es dauert mein ganzes Wochenende.

Aktualisieren Neue Methode

  $scope.create = function() {
    $scope.selectedDevice = {
      name: 'New Device',
      userId: $scope.user.provider + $scope.user.id
    };
    return $scope.devices.push($scope.selectedDevice);
  };

  $scope.$on('angularFireAuth:login', function(evt, user) {
    var promise, ref;
    ref = new Firebase('https://mysite.firebaseio.com/users/' + (user.provider + user.id) + '/registry/');
    promise = angularFire(ref, $scope, 'devices');
  });

Es werden nun genau Elemente unter der Benutzer-ID erstellt. Wenn Sie sich jedoch abmelden und wieder anmelden, werden diese Elemente nicht gelöscht$scope.devices. Daher fügen sie sich nur zu Daten hinzu, jedoch unter dem neu angemeldeten Benutzer.

Aktualisieren

Ich habe viel ausprobiert. Ich habe wahrscheinlich gesetzt$scope.devices zu[] und bewegte sich um Login-Ereignisse in jeder möglichen Kombination. Was schließlich funktionierte, war @ hiattps Geige in der akzeptierten Antwort.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage