工具:Firebase 2.3.1
问题类型:为当前在会话中的用户设置安全规则
身份验证方法:authWithPassword()
我知道目前用户已在浏览器中登录该应用。 我制定了规则,期望一旦用户打开会话,他们就可以访问该浏览器上任何标签中的所有房间数据。
然而,如果我尝试在同一浏览器的其他标签中提取以下网址
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吗?
答案 0 :(得分:4)
是的,只是因为您尝试直接打开网址而发生错误。当您直接在浏览器中打开该网址时,除非您append an auth
query parameter,否则不会发送任何身份验证数据。
https://myfirebaseurl.firebaseio.com/rooms.json?auth=CREDENTIAL
当您在应用内进行身份验证时,Firebase会自动将身份验证作为令牌存储在localStorage 仅适用于托管该应用的域,以便返回的用户保留其会话。