Firebase:authWithPassword后权限被拒绝;可能是因为Firebase规则

时间:2016-02-26 23:17:49

标签: javascript firebase firebase-security firebase-authentication

这是我到目前为止所拥有的:

var ref = new Firebase('https://url.firebaseio.com/');

ref.authWithPassword({
  "email": "email@gmail.com",
  "password": "******"
}, function(err, authData) {
  if (err) {
    console.log(err);
  } else {
    console.log("Authenticated successfully with payload:", authData);
  }
})

我收到一条消息,确认我的身份验证成功。但是,如果我运行ref.update({})之类的东西,我会收到一条错误消息,说明权限已被拒绝。我的Firebase安全规则如下所示:

{
  "rules": {
    "users": {
      "$user_id": {
        ".read": "auth != null && auth.uid == $user_id",
        ".write": "auth != null && auth.uid == $user_id"
      }
    }
  }
}

感谢任何建议,谢谢!

编辑:这是我运行的代码,它给了我错误。

ref.on('value', function(snapshot){
            hsObject = snapshot.val();  //hsObject is the entire Firebase document
        }, function(err){
            hsObject = null;
            console.log('error:', err); //prints "error: Error: permission_denied at /: Client doesn't have permission to access the desired data."
        });

1 个答案:

答案 0 :(得分:1)

从错误消息:

  

错误:错误:在/的permission_denied:客户端无权访问所需数据。

您似乎正在尝试阅读Firebase的根目录。 Firebase会在您阅读的位置验证权限。由于您没有root权限,因此拒绝读取操作。

这是开发人员常见的混淆源,他们认为Firebase会过滤数据并仅返回用户有权访问的内容。但这根本不是Firebase安全模型的工作方式。

rules are not filters下的Firebase文档中对此进行了介绍,并定期在StackOverflow上提供:

我强烈建议您再次阅读该文档页面,因为很容易误解Firebase的工作原理,而这些错误会导致您进入以后必须更新的数据模型。