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

无法从应用访问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;

问题分析与解决方案

  1. 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字段)。

  2. 字段名拼写错误
    代码中comapny_name存在拼写错误(少了一个字母n),需修正为company_name,否则会导致字段不匹配,即使权限正常也会插入失败。

  3. 用户认证状态检查
    调用插入函数前,确认用户已通过Supabase Auth完成登录,可以通过以下代码验证:

    const { data: { user } } = await supabase.auth.getUser();
    if (!user) {
      // 用户未认证,处理逻辑
      return;
    }
    
  4. Supabase客户端配置验证
    确保SupabaseClient初始化时使用了正确的项目URL和anon密钥,配置错误会导致无法连接数据库。

  5. 表结构匹配验证
    检查Supabase控制台中supplier_initial_assessment_1表的字段名、数据类型,确保和插入函数中的字段完全一致,比如字段是否存在、是否允许空值等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:25:18