【问题标题】:Firebase: How can i use onDisconnect during logout?Firebase:我如何在注销期间使用 onDisconnect?
【发布时间】:2016-02-01 15:22:17
【问题描述】:

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

我正在为 angularjs/angularfire 使用 firebase 简单登录

我在 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();


};

【问题讨论】:

  • 所有信息都在您添加的链接中...您到底在哪里挣扎?
  • 在下面回答。如果这不是您想要的,请在您的问题中包含您的问题的最小再现。这通常是在 StackOverflow 上获得帮助的最佳方式。见stackoverflow.com/help/mcve

标签: angularjs node.js firebase


【解决方案1】:

当与客户端的连接丢失时,您提供的 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();

【讨论】:

  • Firebase.goOffline() 也不做任何事情。我什至尝试指向 firebase 上的特定用户参考,即ref.goOffline(),但什么也没有。另外我如何指示空闲状态?上面的例子使用了 jQuery 和它的 timer 函数。我正在尝试为移动设备编写此代码,并且不想包含庞大的 jquery 脚本。谢谢
  • 这太模糊了。请提供minimal, complete verifiable example,以便我们看到您在做什么。
  • 如前所述:调用unauth() 不会不会断开用户连接,也不应该这样做。这是预期和预期的行为。
  • 我知道我通过了... goOffline 也不起作用
  • 为我工作:jsbin.com/yivuza/edit?js,console。如果您遇到问题,请尝试在 jsbin/jsfiddle 中重现它,就像我在这里所做的那样。然后你可以链接到它在你的问题中包含minimum代码。
猜你喜欢
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多