You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase配置仅认证用户插入RLS策略后已登录仍插入失败

问题原因及解决方案

核心问题原因

  • 表名拼写不一致:创建表时使用的表名为submission(单数),后续开启RLS、配置策略、客户端插入操作均使用submissions(复数),若为实际操作中的拼写错误会导致策略配置未生效在目标表上。
  • 缺失角色操作权限:RLS是行级安全过滤规则,生效前提是当前操作的authenticated角色已经拥有目标表的INSERT权限,仅配置RLS策略未授权的情况下依然会被权限系统拦截。

解决方案

  1. 修正表名不一致问题,确保所有操作指向同一张表:
-- 删除错误创建的单数名表(如果存在)
drop table if exists submission;
-- 统一创建复数名的目标表
create table submissions (
  stuff text
);
  1. 开启表的RLS(如果还未开启):
alter table submissions
  enable row level security;
  1. 给authenticated角色授予表的INSERT权限,可按需补充其他操作权限:
-- 仅授予插入权限
grant insert on public.submissions to authenticated;
-- 若同时需要查询、更新、删除权限可执行以下语句
-- grant select, insert, update, delete on public.submissions to authenticated;
  1. 配置插入RLS策略,原有策略逻辑正确可直接使用:
CREATE POLICY "Enable insert for authenticated users only" ON public.submissions 
FOR INSERT 
WITH CHECK (auth.role() = 'authenticated');

配置完成后重新执行客户端插入操作即可正常写入数据。

可选排查项

如果以上配置完成后依然报错,可以解码请求携带的JWT,确认以下信息:

  • JWT的exp字段未过期
  • JWT的role字段值为authenticated
  • 客户端初始化Supabase时使用的是anon public key,不是service_role key(service_role key会默认绕过RLS,不适合客户端使用)

内容的提问来源于stack exchange,提问作者KevinTale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:57:02