Firebase 注销会显示权限被拒绝错误



所以每当我从Firebase注销时,我都会耦合

Error: permission_denied: Client doesn't have permission to access the desired data.

我知道这是因为登录会话已终止,我的某些对象无法再访问Firebase数据。但是如何在注销之前断开此对象的连接?

对于我的一个 Ionic View 中的注销按钮,它只需调用 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();
          } 
        }
    };

所以我在那里销毁了$rootScope.currentUser。我使用相同的getCurrentUser作为配置文件页面。所以错误没有以这种方式出现。但是在其他视图中,我有另一个$firebaseArray,以及另一个具有相同$firebaseObject的 Ref.on("child_added",函数(snap)。当我查看个人资料页面时,此页面至少有 3 个 Firebase 连接,我在注销时收到 3 permission_denied错误(注销按钮位于用户个人资料页面上)。

我的问题是,如何在注销之前断开此 Firebase 连接?有没有办法断开所有火力基地的连接 - 无论是 AngularFire 还是常规火力基地?因此,我可以注销而不必担心我还没有关闭哪个火力基地连接?另外,由于"注销"按钮位于配置文件范围内,而其他连接位于不同的范围内,因此我不知道如何关闭甚至不在配置文件范围内的连接...

您需要在注销时销毁所有 Firebase 引用。像这样的东西。

在注销功能中。

function logout() {
       auth.$unauth();
       $rootScope.$broadcast('logout');
};

在控制器中

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();
});

好吧,我想你有一个按钮可以注销。所以在你的函数 logout() 中,你首先$destroy数据对象,以某种方式等待(这是我试图弄清楚的最佳实践),然后是 authref.unauth();我会说

您需要销毁之前保存数据的对象的 Firebase 引用。如何?

之前,我初始化我的var歌曲,例如:this.songs = this.af.list('/songs');

当我 signOut() 时,我应该销毁我初始化的变量的引用,以便我执行:

this.songs.$ref.off();

有了这条线,你的问题

相关内容

  • 没有找到相关文章

最新更新