angularjs - auth - Firebase logout show Permiso denegado error.
firebase angular 5 (3)
Bueno, supongo que tienes un botón para cerrar la sesión. por lo tanto, en su función de cierre de sesión (), primero $ destruiría el objeto de datos, de alguna manera esperaría (lo cual es la mejor práctica que estoy tratando de resolver), y luego authref.unauth (); Yo diría que
Entonces, cuando salgo de Firebase, me acopio
Error: permission_denied: Client doesn''t have permission to access the desired data.
Entiendo que es porque la sesión de inicio de sesión finaliza, algunos de mis objetos ya no pueden acceder a los datos de Firebase. Pero, ¿cómo puedo desconectar estos objetos antes de cerrar la sesión?
Para el botón de cierre de sesión en una de mis Vistas Iónicas, solo llame a un servicio de Firebase:
function logout() {
auth.$unauth();
getCurrentUser();
};
function getCurrentUser() {
var authData = auth.$getAuth();
if (authData) {
$rootScope.userId = authData.uid;
$rootScope.currentUser = $firebaseObject(authRef.child("users").child(authData.uid));
return $rootScope.currentUser;
} else {
console.log("User is not login!");
$rootScope.userId = null;
$location.path("/auth/signin");
if ($rootScope.currentUser) {
$rootScope.currentUser.$destroy();
}
}
};
Así que destruyo $ rootScope.currentUser allí. Uso el mismo getCurrentUser para la página de perfil. Entonces, el Error no apareció de esta manera. Pero cuando estoy en otras vistas, tengo otra $ firebaseArray, y también otra Ref.on ("child_added", función (complemento) con el mismo $ firebaseObject. Cuando veo la página de perfil, esta página con al menos 3 conexiones de Firebase , Obtuve 3 errores de permission_denied cuando cierro la sesión (el botón de cerrar sesión está en la página de perfil del usuario).
Mi pregunta es, ¿cómo desconecto esta conexión de Firebase antes de cerrar sesión? ¿Hay alguna manera de desconectar TODA la conexión de Firebase, sin importar AngularFire o Firebase regular? Entonces, ¿puedo cerrar la sesión sin preocuparme por la conexión de Firebase que aún no tengo cerrada? Además, como el botón Cerrar sesión está en el alcance del Perfil y la conexión de los otros está en un ámbito diferente, no tengo idea de cómo cerrar la conexión que ni siquiera está en el alcance del perfil ...
Debes destruir todas las referencias de Firebase al desconectarse. Algo como esto.
En la función de cierre de sesión.
function logout() {
auth.$unauth();
$rootScope.$broadcast(''logout'');
};
En el controlador
vm.profile = authService.profile(user.uid); // FirebaseObject Reference
vm.parties = partyService.getPartiesByUser(user.uid); // FirebaseArray Reference
$rootScope.$on(''logout'', function () {
vm.parties.$destroy();
vm.profile.$destroy();
});
Necesitará destruir la referencia de firebase para el objeto que guardó datos previamente. ¿Cómo?
Antes, inicializo mis var songs como: this.songs = this.af.list (''/ songs'');
Cuando inicio sesión (), debo destruir la referencia de la variable que he inicializado para que pueda ejecutar:
this.songs $ ref.off ();
Con esta línea, tu problema