我正在尝试在启用了 RLS 的表中插入一行Enable insert for authenticated users only添加了策略。不幸的是,即使我正确登录,我也无法插入。
重现步骤:
create table submission (
stuff text
);
Run Code Online (Sandbox Code Playgroud)
alter table submissions
enable row level security
Run Code Online (Sandbox Code Playgroud)
CREATE POLICY "Enable insert for authenticated users only" ON public.submissions FOR INSERT WITH CHECK (auth.role() = 'authenticated');
Run Code Online (Sandbox Code Playgroud)
在客户端上,我使用魔术链接登录(该对象已正确添加到本地存储中,因此我知道我正在登录)
我尝试插入
const { data, error } = await supabase
.from("submissions")
.insert({ stuff: 'hello' });
Run Code Online (Sandbox Code Playgroud)
它Authorization Bearer <Jwt>存在于 http 调用中。
{
"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返回我们刚刚插入的行,换句话说,它从表中选择(读取)它。由于我没有添加读取表的策略,所以失败了。
所以有两种解决方案:
{ returning: "minimal" }到,supabase.insert这样它就不会发回该行| 归档时间: |
|
| 查看次数: |
3299 次 |
| 最近记录: |