Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase安全规则阻止写入Firebase_Firebase_Polymer_Polymer 1.0_Firebase Security - Fatal编程技术网

Firebase安全规则阻止写入Firebase

Firebase安全规则阻止写入Firebase,firebase,polymer,polymer-1.0,firebase-security,Firebase,Polymer,Polymer 1.0,Firebase Security,注意:这个问题被标记为polymer,因为polymer库用于生成Javascript 这个问题涉及两个不同但相关的Firebase安全问题。当试图让Firebase安全规则发挥作用时,问题1和问题2似乎暗示了相反的现实和相反的结果。(FWIW:) 问题1 Firebase安全规则阻止写入Firebase 说明书 输入您的firebase ID。例如:“hot-sauce-123” 在新选项卡或窗口中,转到firebase并打开它 允许匿名身份验证: 你的火力基地 >登录和验证 >匿名标签

注意:这个问题被标记为
polymer
,因为polymer库用于生成Javascript

这个问题涉及两个不同但相关的Firebase安全问题。当试图让Firebase安全规则发挥作用时,问题1和问题2似乎暗示了相反的现实和相反的结果。(FWIW:)

问题1 Firebase安全规则阻止写入Firebase 说明书
  • 输入您的firebase ID。例如:“hot-sauce-123”
  • 在新选项卡或窗口中,转到firebase并打开它
  • 允许匿名身份验证: 你的火力基地 >登录和验证 >匿名标签 >选中“启用匿名用户身份验证”
  • 不应用安全规则:安全和规则> { "rules": { ".read": true, ".write": true } } { "rules": { "users": { "$uid": { ".read": "auth != null && auth.uid === $uid", ".write": "auth != null && auth.uid === $uid" } } } } 允许写。
  • 注意:此结果与上述步骤14和15的结果相反,在这些步骤中,普通URL(未附加.json)无法写入
  • 将“.json”附加到URL,以便输入字段的内容如下 “用户/ag69g401-f097-4171-bca4-927fd1a6e1f3/foo/bar.json”
  • 单击标有“模拟写入”的按钮
  • 注意,响应的内容类似于:
    无效路径。模拟中止。
  • 注意:这个结果与上面步骤16和17的结果相反,在这两个步骤中,附加了.json的URL是唯一有效的
  • 请注意,这些模拟器测试显示的结果与上述问题1中的实时代码测试结果相反
  • 问题1 您正在使用Polymer
    firebase auth
    元素向firebase进行身份验证

    <firebase-auth id="firebaseLogin"
                   user="{{user}}"
    ...
    

    这是对Firebase执行AJAX请求,这意味着您正在使用。但由于这是一个常规HTTP调用,因此它不会“继承”Firebase JavaScript客户端的身份验证

    要验证您的REST请求,您需要。您可以使用
    ref.getAuth().token
    从Firebase引用获取令牌

    问题2 Firebase数据库中的每个元素都可以通过唯一的URL访问。您可以使用Firebase SDK之一访问它,也可以直接访问Firebase公开的REST API

    根据我从jsbin收集到的信息,您正在使用以下方式向Firebase写信:

    computeFbTargetJson: function(f) {
        return f + '.json';
    }
    
    computeFbTargetJson: function(f) {
        return f + '.json';
    }
    

    这是对Firebase执行AJAX请求,这意味着您正在使用。该API文档的第一段解释了Firebase数据库URL如何映射到REST API:

    我们可以使用任何Firebase应用程序URL作为REST端点。我们需要做的就是将.json附加到URL的末尾,并从我们最喜欢的HTTPS客户端发送请求

    因此,为了使用RESTAPI访问Firebase中的任何数据,需要将
    .json
    附加到该数据的URL

    使用Firebase模拟器时,操作类似于使用Firebase的JavaScript SDK。在这种情况下,您不应该将
    .json
    后缀放在URL的末尾

    因此在
    https://mine.firebaseio.com/
    ,假设您在
    /users/de01fc8104
    上有一个用户配置文件

    • 您可以在模拟器中访问该记录,也可以使用Firebase SDK作为
      https://mine.firebaseio.com/users/de01fc8104
    • 要使用RESTAPI访问记录,URL为
      https://mine.firebaseio.com/users/de01fc8104.json
    总结 这两个问题都是由于您使用两种不同的方式访问Firebase造成的:JavaScript SDK和REST API。虽然这两种方法可以一起使用,但您必须确保提供所需的信息。一般来说,如果您坚持使用一种从单个客户机访问Firebase的方式,您将获得更轻松的体验。

    在Polymer speak中可以翻译为:

    在执行安全规则时从客户端将数据写入Firebase。从代码的角度来看,它更高效,因为
    firebase collection
    会自动为您处理所有必要的身份验证令牌。

    感谢您的精彩回答。(+1)顺便说一句,根据左侧的导航菜单,但页眉的标题表示用户授权。因此Firebase的某些人可能想要决定什么是什么,并使这两个页面标题像其他页面标题一样匹配它们的菜单标签。这种差异确实触发了我的强迫症。
    this.set('$.ajax.url'  , this.fbTargetJson);
    this.set('$.ajax.body' , JSON.stringify({
        jquux: 'jbaz'
       }));
    this.$.ajax.generateRequest();
    
    computeFbTargetJson: function(f) {
        return f + '.json';
    }
    
    this.set('$.ajax.url'  , this.fbTargetJson);
    this.set('$.ajax.body' , JSON.stringify({
        jquux: 'jbaz'
       }));
    this.$.ajax.generateRequest();