无法从应用访问Supabase表:插入数据遇权限问题求助
排查Supabase表插入失败问题
提交Formik/MUI表单时,调用以下insertIntoDB函数出现权限错误,尝试设置RLS策略后问题依旧,以下是具体排查和解决方案:
插入函数代码
import { supabase } from '../../../Utilities/SupabaseClient'; export const insertIntoDB = async (values) => { let error; try { error = await supabase.from('supplier_initial_assessment_1').insert([{ comapny_name: values.companyName, // 注意:此处字段名拼写错误,应为company_name climate_change_policy: values.climateChangePolicy, climate_change_policy_description: values.climateChangePolicyDescription, climate_team_responsible: values.climateTeamResponsible, climate_team_description: values.climateTeamDescription, currently_measure_emissions: values.currentlyMeasureEmissions, currently_measured_emissions_program_description: values.currentlyMeasuredEmissionsProgramDescription, scopes_measured_description: values.scopesMeasuredDescription, emissions_data_stored_description: values.emissionsDataStoredDescription, }],{ returning: "minimal" }); console.log(values); } catch (error) { console.log('Error message', error); throw error; } };
当前设置的RLS策略
BEGIN; ALTER POLICY "Enable insert for authenticated users only" ON "public"."supplier_initial_assessment_1" WITH CHECK (false); COMMIT;
问题分析与解决方案
RLS策略错误
你设置的WITH CHECK (false)会完全禁止任何插入操作,因为条件永远不成立。正确的认证用户插入策略应该是:BEGIN; -- 确保表已启用RLS(如果未启用) ALTER TABLE "public"."supplier_initial_assessment_1" ENABLE ROW LEVEL SECURITY; -- 创建允许认证用户插入的策略 CREATE POLICY "Enable insert for authenticated users only" ON "public"."supplier_initial_assessment_1" FOR INSERT TO authenticated WITH CHECK (true); COMMIT;若需要更严格的权限控制(比如用户只能插入自己的数据),可以在
WITH CHECK中加入用户ID匹配条件,比如auth.uid() = user_id(需表中存在user_id字段)。字段名拼写错误
代码中comapny_name存在拼写错误(少了一个字母n),需修正为company_name,否则会导致字段不匹配,即使权限正常也会插入失败。用户认证状态检查
调用插入函数前,确认用户已通过Supabase Auth完成登录,可以通过以下代码验证:const { data: { user } } = await supabase.auth.getUser(); if (!user) { // 用户未认证,处理逻辑 return; }Supabase客户端配置验证
确保SupabaseClient初始化时使用了正确的项目URL和anon密钥,配置错误会导致无法连接数据库。表结构匹配验证
检查Supabase控制台中supplier_initial_assessment_1表的字段名、数据类型,确保和插入函数中的字段完全一致,比如字段是否存在、是否允许空值等。
内容的提问来源于stack exchange,提问作者Rodriques Perry
相关产品推荐
相关产品推荐

