【问题标题】:Firebase Security Rules for Cloud Storage split() Example ErrorCloud Storage split() 示例错误的 Firebase 安全规则
【发布时间】:2017-12-06 04:07:53
【问题描述】:

我正在尝试遵循 Cloud Storage 参考的 Firebase 安全规则中列出的示例:

https://firebase.google.com/docs/reference/security/storage/

我将split() 的示例复制并粘贴到我的存储规则中,它不会编译/让我保存:

根据提供的正则表达式拆分字符串并返回字符串列表。使用 Google RE2 语法。

// Allow files named "file.*" to be uploaded
match /{fileName} {
  allow write: if fileName.split('.*\..*')[0] == 'file'
}

我得到的错误: Unexpected '.'.

在我的一生中,我无法运行提供的示例代码,也无法进行更改并使正则表达式按预期工作。

有人对Allow files named "file.*" to be uploaded有什么建议吗?

【问题讨论】:

    标签: firebase firebase-security firebase-storage


    【解决方案1】:

    规则中似乎缺少\。试试这个:

    // Allow files named "file.*" to be uploaded
    match /{fileName} {
      allow write: if fileName.split('.*\\..*')[0] == 'file'
    }
    

    通常在使用正则表达式时,首先要检查反斜杠。不同的系统使用反斜杠进行转义,有时(例如此处)您需要对它们进行双重转义。

    【讨论】:

    • 弗兰克,感谢您的快速回复。您的正则表达式 split('.*\\..*')[0] 示例仍然对我不起作用,但是您对双重转义的评论让我走上了正确的道路。似乎你会做split('\\.')[0] 来获取实际的文件名,这对我有用。我是否遗漏了什么,或者文档中的示例有点偏离?在更改后立即进行测试时,我也得到了误报,似乎规则到达节点或删除一些缓存存在传播延迟?
    • @briannyc:您对延迟的观察是正确的。 Security Rules Guide 中指出:规则会立即上传到 Cloud Storage 服务器,但最多可能需要五分钟才能生效
    • @YosefBro 这个问题是关于实时数据库的,它不允许在其键中使用./。这个问题是关于云存储的,在名称中使用. 实际上很常见,用于分隔基本文件名及其扩展名。
    【解决方案2】:

    文档有误。改用这个('\.'):

    // Allow files named "file.*" to be uploaded
    match /{fileName} {
      allow write: if fileName.split('\\.')[0] == 'file'
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 2018-01-25
      • 2021-04-10
      • 2019-04-16
      • 2020-11-03
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2021-04-27
      相关资源
      最近更新 更多