无法插入到 Supabase 中具有经过身份验证的角色策略的表

Gre*_*eye 6 supabase

我正在尝试在启用了 RLS 的表中插入一行Enable insert for authenticated users only添加了策略。不幸的是,即使我正确登录,我也无法插入。

重现步骤:

  1. 创建提交表
create table submission (
  stuff text
);
Run Code Online (Sandbox Code Playgroud)
  1. 启用 RLS
alter table submissions
  enable row level security
Run Code Online (Sandbox Code Playgroud)
  1. 添加策略
CREATE POLICY "Enable insert for authenticated users only" ON public.submissions FOR INSERT WITH CHECK (auth.role() = 'authenticated');
Run Code Online (Sandbox Code Playgroud)
  1. 在客户端上,我使用魔术链接登录(该对象已正确添加到本地存储中,因此我知道我正在登录)

  2. 我尝试插入

const { data, error } = await supabase
 .from("submissions")
 .insert({ stuff: 'hello' });
Run Code Online (Sandbox Code Playgroud)

Authorization Bearer <Jwt>存在于 http 调用中。

  1. 但我得到了错误
{
  "hint":null,
  "message":"new row violates row-level security policy for table \"submissions\"",
  "code":"42501",
  "details":null
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

Gre*_*eye 10

我发现出了什么问题。

问题是,默认行为supabase.insert返回我们刚刚插入的行,换句话说,它从表中选择(读取)它。由于我没有添加读取表的策略,所以失败了。

所以有两种解决方案:

  1. 添加新策略以便能够从该表中进行 SELECT
  2. 添加{ returning: "minimal" }到,supabase.insert这样它就不会发回该行