Supabase 返回空数组

Geo*_*nos 6 postgresql svelte supabase

我有一个消息表,位于 Supabase 的“公共”模式下。我试图从本地开发环境中获取所有行,但没有返回任何内容。

我想:

const response = await supabase.from('messages').select('*');
Run Code Online (Sandbox Code Playgroud)

我在 Supabase 日志中看到该请求:似乎回复了200OK

使用Sveltekit作为客户端,以及加载函数:

/** @type {import('./$types').PageLoad} */
export async function load() {
    const response = await supabase.from('messages').select('*');

    return { response };
}
Run Code Online (Sandbox Code Playgroud)

这是响应的日志:

{@debug} /src/routes/+page.svelte (6:1)
{
  data: {
    response: {
      error: null,
      data: [],
      count: null,
      status: 200,
      statusText: 'OK'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是表格: 在此输入图像描述

小智 10

OP已经通过禁用RLS解决了这个问题。我将提供有关如何解决问题的更多背景信息。

RLS 代表行级安全性,它使得只有行的所有者才能查看自己的数据。假设用户A插入一行数据,只有用户A可以看到。如果您select *以用户 B 身份运行,您将看不到它。

这有助于防止其他用户与用户的项目进行交互。

对于您的情况,还有两种其他方法可以处理此问题:

1.如果您以管理员身份查询

如果您是管理员并且应该有权访问所有数据,要初始化supabase javascript客户端,您可以使用服务密钥而不是匿名密钥,这将为您提供所有权限

2.如果你只是想让每个人都看到所有内容

在行级安全性规则中,您可以仅禁用 SELECT 规则,但不要禁用插入、更新和删除的 RLS。那么用户只能插入、更新和删除自己的东西,但可以查看每个人的东西。


Geo*_*nos 3

我启用了“RLS”https://supabase.com/docs/learn/auth-deep-dive/auth-row-level-security这就是为什么没有结果。

禁用它就成功了。有关 RLS 的更多信息:https ://supabase.com/docs/guides/auth/row-level-security