Firebase:如何实施安全会话跟踪?

时间:2014-06-17 21:06:18

标签: firebase firebase-security firebasesimplelogin

编辑试图简化这个问题......在一个非常基础的层面上,我相信这必须是会话系统的一个相当基本的需求...怎么做我们有一个SECURE会话跟踪器而没有破坏onDisconnect功能?如果您添加安全规则,onDisconnect不起作用,如果您不添加安全规则,任何人都可以欺骗"通过写入未受保护的表格或删除其他人的存在来登录会话。

我正试图解决一个问题,其中" onDisconnect"没有被调用,因为我的安全规则只允许登录用户在/ sessions / $ userid /"中写入他们的状态数据" ...只要该用户已登录,onDisconnect就可以正常工作,但如果该用户在注销后关闭了他们的浏览器,或者由于超时而被注销,则onDisconnect会被安全规则阻止。

起初我以为......"哦,我可以追溯到退出发生的地方,并在那里进行另一次会话清理。"但是我想通过更多我会意识到auth = newFirebaseSimpleLogin回调"否则"阻止似乎是检测注销的唯一方法。最重要的是,在注销发生之后返回回调,这使我返回到我需要登录的方块,以便onDisconnect调用可以删除我的会话,但此时,我已经注销了

我错过了什么吗?我不知道有预登出电话吗?我可以在安全规则文件中做些什么特别的事情,允许onDisconnect在注销后删除会话吗?

这是我对"表"的安全规则块。问题:

"sessions":{
    "$user":{
      ".write": "$user == auth.uid"
    }
},

在JS中,它很简单:

var con = ref.sessions[user].push(true);
con.onDisconnect().remove();

正如预期的那样,由于我没有登录onDisconnect,我得到:

FIREBASE WARNING: set at /sessions/simplelogin:16 failed: permission_denied  
编辑:什么&downvote? = /

1 个答案:

答案 0 :(得分:1)

我建议在调用logout()之前删除在线状态位。

如果您想要追踪"存在"如果已注销用户,您可以将新的状态位设置为未经过身份验证的用户,也可以匿名登录: https://www.firebase.com/docs/security/simple-login-anonymous.html