Firebase:auth.uid 是否在页面选项卡中保持活动状态?

Firebase: Does the auth.uid stay active across page tabs?

工具:Firebase 2.3.1

问题类型:为当前会话中的用户设置安全规则

身份验证方法:authWithPassword()

我知道当前用户是在浏览器中登录应用程序的。 我设置规则时期望一旦用户打开会话,他们就可以在该浏览器的任何选项卡中访问所有房间数据。

然而,如果我尝试在同一浏览器的不同选项卡中获取下面的 URL..

https://myfirebaseurl.firebaseio.com/rooms.json

..我会回来的

{
  "error" : "Permission denied"
}

这很奇怪,因为 URL 在我打开我的应用程序的任何选项卡中的程序中工作正常,或者如果我刷新页面

例如,这不会引发任何错误:

var firebaseRoomsRef = new Firebase("https://myfirebaseurl.firebaseio.com/rooms")//fetch just fine

规则如下:

 {
     "rules": {
         "rooms": {
              ".read": "root.child('users/'+auth.uid).exists()",
         }
 }

所以我的主要问题是: 错误只是因为我试图像那样直接调用 URL json 才发生吗?或者我的应用程序是否在做一些不同的事情来授予它访问消息的权限?

附带问题: 当我成功调用 authWithPassword() 时,Firebase 会自动将 "auth" 作为令牌或 cookie 存储在我的程序中,对吗?

是的,错误的发生只是因为您试图直接打开 URL。当您直接在浏览器中打开 URL 时,除非您 append an auth query parameter,否则不会发送任何身份验证数据。

https://myfirebaseurl.firebaseio.com/rooms.json?auth=CREDENTIAL

当您在您的应用程序中进行身份验证时,Firebase 会自动将身份验证作为令牌存储在 localStorage 中,仅适用于托管该应用程序的域,以便返回的用户将保留他们的会话。