Supabase行级安全(RLS)失效:认证用户无法读取自身项目数据
Supabase行级安全(RLS)配置排查:认证用户无法读取自身项目数据
问题背景
配置Supabase行级安全(RLS),要求仅认证用户能通过auth.uid()访问自己的项目。目前已成功将项目数据写入数据库,但无法读取数据。
当前配置与代码
RLS策略配置

项目表结构

数据获取代码
export async function getProjects() { let { data: projects, error } = await supabase .from("projects") .select("*") .order("created_at", { ascending: true }); if (error) { console.log(error); } console.log(projects); return projects; }
排查与解决建议
- 检查SELECT策略规则:确认RLS的SELECT策略条件为
user_id = auth.uid(),且策略处于启用状态。需保证策略针对SELECT操作,且正确关联用户ID字段。 - 验证用户认证状态:调用
getProjects前,先通过supabase.auth.getSession()确认用户已完成认证。未认证时auth.uid()返回null,无法匹配数据行。 - 核对数据的user_id字段:查看数据库中已写入的项目数据,确认
user_id字段存储的是当前认证用户的UUID,而非空值或错误ID。 - 查看错误详情:如果
console.log(error)有输出,根据具体信息排查,比如permission denied说明策略未正确授权,需调整规则。 - 确认表RLS已启用:在Supabase控制台的表设置中,检查
projects表的行级安全开关是否已打开。
内容的提问来源于stack exchange,提问作者Dotman
相关产品推荐
相关产品推荐

