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

Supabase Realtime payload.new为空且报401未授权问题排查

Supabase Realtime 接收空payload.new及401错误问题排查

从你提供的payload里能看到明确的Error 401: Unauthorized错误,这就是导致new和old字段为空的核心原因——Realtime服务因为权限问题,没有返回实际的变更数据。

关键排查点:

  • Realtime表级权限配置:即使你关闭了RLS,Supabase Realtime仍需要单独给对应角色配置表的事件访问权限。进入Supabase控制台,找到public schema下的ReportIdeally表,在Realtime设置里确认是否给anon角色开启了UPDATE(以及你需要监听的其他事件)权限。
  • 初始化密钥的权限范围:你用NEXT_PUBLIC_SUPABASE_KEY(即anon密钥)初始化客户端是正确的前端做法,但要确保这个密钥对应的anon角色拥有访问目标表Realtime事件的权限。
  • 无需手动添加Auth Bearer:用Supabase官方SDK初始化客户端后,SDK会自动在请求头中携带对应的认证信息,不需要手动添加Bearer token。

验证步骤:

  1. 先将监听范围缩小到目标表,避免无关干扰:
useEffect(() => {
  const runsupabase = supabase
    .channel("report-updates")
    .on(
      "postgres_changes",
      {
        event: "UPDATE",
        schema: "public",
        table: "ReportIdeally",
      },
      (payload) => {
        console.log("New Payload", payload);
      }
    )
    .subscribe();

  return () => {
    supabase.removeChannel(runsupabase);
  };
}, [supabase]);
  1. 去Supabase控制台的Realtime面板,检查全局和表级的权限设置,确保anon角色能访问对应表的实时事件。
  2. 若有条件,可在后端用service role密钥初始化客户端测试(注意:该密钥禁止暴露在前端),如果测试能获取完整payload,即可确定是anon角色的权限配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:33:24