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.