Supabase 存储桶 - 新行违反了表“objects”的行级安全策略

Supabase bucket - new row violates row-level security policy for table "objects"

提问人:Mat 提问时间:11/3/2022 更新时间:11/17/2022 访问量:10386

问:

我在将头像上传到我的 Supabase 存储桶时遇到了问题,因为它给了我“新行违反了表”对象“的行级安全策略”。我尝试了其他 StackOverflow 解决方案,但一无所获。 在尝试上传之前,我使用 supabse 登录,因此我的用户已通过身份验证,但它仍然不允许我上传。我在storage.objects中添加了此策略:

(role() = 'authenticated'::text)然后单击“插入”按钮。有谁知道我做错了什么?我认为这与政策有关。谢谢

这就是我尝试上传头像的方式:

try{
                const { data, error } = await supabase
                    .storage
                    .from('/public/avatars')
                    .upload(`${values.email}.png`, values.avatar, {
                        cacheControl: '3600',
                        upsert: true
                });
                if(error) throw error;
            }catch(error){
                console.log(error);
            }
苏帕巴塞

评论


答:

1赞 thorwebdev 11/7/2022 #1

我猜你有一个名为文件夹的存储桶,对吗?publicavatars

在这种情况下,您可以按如下方式上传:

const avatarFile = event.target.files[0]
const { data, error } = await supabase
  .storage
  .from('public')
  .upload(`avatars/avatar1.png`, avatarFile, {
    cacheControl: '3600',
    upsert: false
  })
26赞 Juan Silupú Maza 11/17/2022 #2

添加新政策并享受:)

因为 upsert 需要 DELETE 和 UPDATE

enter image description here

评论

2赞 Brady Dowling 8/26/2023
这是非常宽松的,基本上允许经过身份验证的用户对存储桶执行任何他们想要的任何操作。
0赞 Ben Neighbour 10/29/2023
@BradyDowling 我同意这个愚蠢的例子,但在 SQL 表达式中,您可以做更多的事情,例如验证经过身份验证的用户的角色等。Supabase就是这样非常强大。
0赞 Hafiz DotTeck 12/19/2023 #3

我有同样的问题!在 Next.js 中,解决方案是使用身份验证助手的“supabase”实例,例如:const supabase = createServerActionComponentClient({cookies});而不是从密钥和URL创建的普通Supabase客户端。