Firebase Storage安全规则.matches(regex)失效问题求助
Firebase Storage安全规则正则匹配问题解决
问题根源
错误源于正则字符串的转义处理不当,以及正则未覆盖完整文件名匹配逻辑:
- Firebase Storage规则的字符串中,反斜杠需要双转义(
\\)才能被识别为正则的转义符,原正则里的\.会被解析器误判,引发语法报错 - 原正则未添加
$结尾,无法确保严格匹配数字.jpg格式(比如12.jpg会被误匹配)
修正后的完整规则代码
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /photos/{uid} { match /profile_photos/{image} { allow read: if isUserIsAuth(); allow write: if isUserIsAuth() && isUserOwner(uid) && image.matches('^[0-9]\\.jpg$'); } } } } function isUserIsAuth() { return request.auth != null && (request.auth.token.email_verified || request.auth.token.firebase.sign_in_provider == "anonymous"); } function isUserOwner(userID) { return request.auth.uid == userID; }
修改说明
- 正则修正:将
'^[0-9]\.jpg'改为'^[0-9]\\.jpg$'\\.:正确转义小数点,避免解析器识别错误$:确保文件名以.jpg结尾,严格匹配0.jpg到9.jpg的目标格式
- 逻辑优化:给
isUserIsAuth函数的条件添加括号,明确逻辑优先级(&&优先级高于||,不加括号会导致判断逻辑偏离预期) - 格式调整:统一缩进,提升代码可读性
内容的提问来源于stack exchange,提问作者Kaleb Schmottlach
相关产品推荐
相关产品推荐

