Firebase:如何在注销期间使用onDisconnect?

时间:2016-02-01 15:22:17

标签: angularjs node.js firebase

如何检测用户何时退出firebase(facebook,google或password)并触发firebase在线系统中的onDisconnect方法。 .unauth()不起作用。我想在用户登录和退出时显示用户的在线和离线状态,最小化应用程序(空闲) - 不仅仅是关闭设备电源并从设备上的活动应用程序中删除应用程序。

我使用firebase简单登录angularjs / angularfire

我在firebase网站上使用基于本教程的代码。 https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html

请为此我需要帮助! 在线代码:

var connectedRef = new Firebase(fb_connections);
var presenceRef = new Firebase(fb_url + 'presence/');
var presenceUserRef = new Firebase(fb_url + 'presence/'+ userID + '/status');
var currentUserPresenceRef =  new Firebase(fb_url + 'users/'+ userID + '/status');

connectedRef.on("value", function(isOnline) {
    if (isOnline.val()) {
      // If we lose our internet connection, we want ourselves removed from the list.
      presenceUserRef.onDisconnect().remove();
      currentUserPresenceRef.onDisconnect().set("<span class='balanced'>☆</span>");
      // Set our initial online status.
      presenceUserRef.set("<span class='balanced'>★</span>");
      currentUserPresenceRef.set("<span class='balanced'>★</span>");
    }

  });

退出功能:

var ref = new Firebase(fb_url);
var usersRef = ref.child('users');
service.logout = function(loginData) {
    ref.unauth();
    //Firebase.goOffline();  //not working
    loggedIn = false;
    seedUser = {};
    clearLoginFromStorage();
    saveLoginToStorage();
    auth.logout();


};

1 个答案:

答案 0 :(得分:3)

当您与客户端的连接丢失时,您提供的onDisconnect()代码将自动在Firebase服务器上运行。要强制客户端断开连接,您可以拨打Firebase.goOffline()

请注意,调用unauth()只会将用户从Firebase连接中签出。它不会断开连接,因为可能存在用户仍然可以访问的数据。

<强>更新

这对我有用:

var fb_url = 'https://yours.firebaseio.com/';
var ref = new Firebase(fb_url);

function connect() {
  Firebase.goOnline();
  ref.authAnonymously(function(error, authData) {
    if (!error) {
      ref.child(authData.uid).set(true);
      ref.child(authData.uid).onDisconnect().remove();
    }
  });
  setTimeout(disconnect, 5000);
}

function disconnect() {
  ref.unauth();
  Firebase.goOffline();
  setTimeout(connect, 5000);
}

connect();