Evitar que itens no escopo sejam gravados em registros de usuário diferentes
Eu estava tendo sucesso com o uso do AngularFire em um cenário em que há um usuário no meu aplicativo.
Agora que tenho autenticação ativa, estou percebendo que atribuiritems
para$scope.items
é catastrófico ao trocar de usuários, principalmente devido à$scope
não atualizar corretamente.
Lendo diretamente dos documentos ...
var ref = new Firebase('https://<my-firebase>.firebaseio.com/items');
angularFire(ref, $scope, 'items');
Eu preciso que estes sejam apenas oitems
do usuário atualmente autorizado. Então, atualmente, eu faço isso (se há uma maneira melhor, não hesite em me dizer!)
var ref = new Firebase('https://<my-firebase>.firebaseio.com/items/userId');
angularFire(ref, $scope, 'items');
Eu gerouserId
usandoauth.provider
eauth.id
, btw. Agora que meus itens são namespaced em (digamos)user1
var ref = new Firebase('https://<my-firebase>.firebaseio.com/items/[user1id]');
angularFire(ref, $scope, 'items');
Eu adiciono itens para$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' }
]
*/
}
O problema
Agora, se eu fizer logout e login como outra pessoa, magicamente esse usuárioeenie meenie miney
emoe
Porque$scope.items
manteve a matriz entre logout e login.
Tentei definir$scope.items = []
no evento de logout, mas isso na verdade esvazia todos os registros. Estou tirando meu cabelo. Isso é 0,001% do que eu preciso fazer no meu projeto e está levando todo o meu final de semana.
Atualizar Novo método
$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');
});
Agora, criará itens com precisão sob o ID do usuário. No entanto, ainda assim, quando você faz logout e login novamente, esses itens não são removidos de$scope.devices
. Portanto, eles apenas se adicionam aos dados, mas sob o usuário recém-conectado.
Atualizar
Eu fiz muita tentativa e erro. Eu provavelmente defini$scope.devices
para[]
e movido em torno de eventos de login em todas as combinações possíveis. O que eventualmente funcionou foi o violino de @hiattp na resposta aceita.