Supabase公共存储桶上传文件失败 报objects表RLS策略违规错误
错误关联判断
这个报错和你做的文件base64编码、上传前解码操作完全无关。返回内容里的Invalid JWT是Supabase Storage的误导性提示,真正触发拦截的原因是storage.objects表的行级安全(RLS)策略校验不通过,文件内容的转码逻辑不会触发表级的权限校验规则。
现有策略的配置缺失
你当前只配置了(bucket_id = 'trycoin'::text)作为insert、select策略的判断条件,不足以满足公共上传的校验要求,缺以下配置:
- 确认策略的适配角色:公共匿名访问的策略必须把授权角色设置为
anon,如果只给已登录用户对应的authenticated角色配置了策略,匿名上传请求会直接被拦截。 - Insert策略不能只校验bucket_id字段,必须补充文件路径字段的非空判断,符合要求的insert策略完整判断条件为:
bucket_id = 'trycoin' AND name IS NOT NULL
- 不要遗漏存储桶本身的权限配置:绝大多数人卡在这里——只给
storage.objects表加了策略,忘了给storage.buckets表加对应权限。匿名角色必须拥有trycoin桶的查询权限,否则RLS校验时无法识别桶的公开属性,会直接抛错。需要给storage.buckets表新增一条面向anon角色的select策略,判断条件为:
id = 'trycoin'
- 配置策略时不要额外限制
metadata字段写入:如果上传时自动携带了MIME类型、缓存规则等元数据,策略里加了metadata字段的限制条件也会触发拦截。
兜底排查项
补完上述配置仍报错的话,逐一核对以下设置:
- 确认trycoin存储桶本身是公开桶,没有开启「禁止公共写入」的桶级限制。
- 检查策略的授权动作是否匹配:insert策略必须勾选INSERT权限,select策略必须勾选SELECT权限,不要出现动作错配。
- 核对请求里携带的anon key是否和项目后台生成的密钥一致,密钥拼写错误也会返回同类报错。
内容的提问来源于stack exchange,提问作者risky last
相关产品推荐
相关产品推荐

