Firebase 在注销时会一直同步三向绑定对象

Firebase keeps syncing three-way binded object when logged out

本文关键字:绑定 对象 同步 一直 注销 Firebase      更新时间:2023-09-26

我使用 Firebase 的三向数据绑定方法同步$uid的朋友列表(在我的代码中定义为userId)。

我注意到,在同一台

计算机上(我在同一台浏览器中进行测试)注销然后使用另一封电子邮件登录时,Firebase 会不断同步上一个userId

因此,如果我先登录并userId = "userId_1"然后注销,使用另一封电子邮件和我的userId = "userId_2"登录,在我的朋友列表中,我从 refs 获得一个三向数据绑定的朋友列表:

fbREF + "/friends/" + "userId_1"

fbREF + "/friends/" + "userId_2"

如何停止同步来自旧用户 ID 的数据?


方法

在我的工厂中,我按如下方式同步:

    self.syncFriends = function(userId) {
        var ref = new Firebase(fbREF + "/friends/" + userId);
        return $firebaseObject(ref);
    };

其中fbREF = "https://CUSTOMREF.firebaseio.com" ;

当用户登录时,显然他有一个由函数 ref.onAuth(fnCallback) 检索的 userId,我调用如下:

self.checkSocialAuthState = function() {
      var qCheck = $q.defer();
      // --
      function authDataCallback(authData) {
        if (authData) {
          qCheck.resolve(authData);
        } else {
          qCheck.reject("SOCIALAUTH_LOGGED_OUT")
          console.log("User is logged out");
        }
      };
      // --
      var ref = new Firebase(fbREF);
      ref.onAuth(authDataCallback);
      return qCheck.promise;
    };

然后将userId嵌入到authData["auth"].uid中。

除非您执行 unauth() 方法,否则连接在 Firebase 端处于活动状态。因此,请在注销时执行unauth()。它应该可以解决您的问题。