我试图通过访问来获取用户名 数据值保存为uid中的子项(作为父项):
var ref = new Firebase("https://mintio.firebaseio.com");
var authData = ref.getAuth();
var username = null;
ref.on("value" , function(snapshot){
console.log("reading initiaized");
var usernameSnap = snapshot.child(authData.uid).child("name");
username = usernameSnap.val();
console.log("username read");
});
但是用户名保持为空并且消息永远不会记录到控制台中...好像永远不会调用once()函数。
authData对象包含正确的uid(" google:107739486693148575362")
数据看起来像这样:
编辑: 这些是我的安全规则:
{
"rules": {
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth !== null && auth.uid == $uid"
}
}
}
}
如果这还没有足够的信息,可以在此处找到回购:https://Minzkraut@bitbucket.org/Minzkraut/mintio.git
我在这里做错了吗?
答案 0 :(得分:1)
当我尝试访问您的数据库时,我得到:
错误:permission_denied:客户无权访问所需数据。
所以看起来你有安全规则阻止读取成功。
最有可能的是,您有一个安全措施,可确保每个用户只能访问自己的用户数据:
{
"rules": {
"$uid": {
".read": "auth.uid == $uid"
}
}
}
如果您具有与上述类似的安全规则,则在执行此查询时:
var ref = new Firebase("https://mintio.firebaseio.com");
ref.on("value" , function(snapshot){ ...
您正尝试从数据库的根目录进行读取。 Firebase服务器会根据您的安全规则对此进行检查,并指出您不具有对数据库根目录的读取权限。所以它拒绝了这项行动。
您想要的是直接访问用户的数据:
var ref = new Firebase("https://mintio.firebaseio.com");
ref.child(ref.getAuth().uid).on("value" , function(snapshot){ ...
使用最后一个片段,读取操作将从用户自己的数据开始。 Firebase服务器会检查规则,并会看到"auth.uid == $uid"
为真。
这是使用Firebase安全规则的两个最常见的陷阱之一: