标签: supabase-database

Supabase 客户端查询出现“未捕获错误:发现多个关系”

我正在构建一个多租户应用程序,并在添加指向同一个表的多个关系后遇到错误:

Uncaught Error: More than one relationship was found for teams and users
Run Code Online (Sandbox Code Playgroud)

执行此查询时:

const data = await supabaseClient.from('organizations')
.select(`
  *,
  teams(
    id,
    org_id,
    name,
    members:users(
      id,
      full_name,
      avatar_url
    )
  )
`);
Run Code Online (Sandbox Code Playgroud)

我有以下表结构(为简洁起见,省略了一些字段):

table users (
  id uuid PK
  full_name text
  email text
)

table organizations (
  id uuid PK
  ....
)

table organization_memberships (
  id uuid PK
  organization_id uuid FK
  user_id uuid FK
  role ENUM
)

table teams (
  id uuid PK
  name text PK
)

table team_memberships ( …
Run Code Online (Sandbox Code Playgroud)

postgresql relational-database supabase supabase-database

4
推荐指数
1
解决办法
2073
查看次数

Supabase 中基于角色的身份验证

我正在尝试在 supabase 中制定策略,其中具有管理员角色的用户只能获取角色为“代理”的员工列表

有一个“用户”表,我正在尝试添加以下策略

"(auth.email() in (select users.email from users where users.role = 'admin')) and (role = 'agent')
Run Code Online (Sandbox Code Playgroud)

用户表有以下列

名字 | 姓氏 | 角色 | 电子邮件 | 密码

但是我收到了 Infinite recursion on users table 消息。

我如何在这里创建基于角色的策略?提前致谢!

supabase supabase-database

3
推荐指数
1
解决办法
9335
查看次数

无法访问环境变量 next.js

我正在使用 Next.js 和 Supabase 创建一个应用程序。当我在中创建客户端时/utils/supabase-client.js,它会抛出错误Error: supabaseUrl is required.

这是我的文件:

import { createClient } from '@supabase/supabase-js'

const supabaseUrl = process.env.SUPABASE_PROJECT_URL
const supabaseAnonKey = process.env.SUPABASE_ANON_KEY

export const supabase = createClient(supabaseUrl, supabaseAnonKey)
Run Code Online (Sandbox Code Playgroud)

当然,我的 env 变量没问题,并在 .env 文件中定义,如下所示:

SUPABASE_PROJECT_URL=myRealSupabaseProjectUrl
SUPABASE_ANON_KEY=myRealSupabaseAnonKey

Run Code Online (Sandbox Code Playgroud)

需要澄清的是,我正在使用其他环境变量(例如内容丰富的 API 密钥)并且它们工作正常。如果我登录并且/utils/supabase-client.js日志有效并且显示正确的值。看来问题出在我认为supabaseUrlsupabaseAnonKeycreateClient()

然后,在模板页面中,我这样使用它:

import { supabase } from '../lib/supabase-client'
Run Code Online (Sandbox Code Playgroud)

以及组件内部:

  const handleViews = useCallback(async () => {
    try {
      const { data } = await supabase
        .from('Page Views')
        .select()
        .eq('slug', query)
      try {
        // …
Run Code Online (Sandbox Code Playgroud)

environment-variables reactjs next.js supabase supabase-database

3
推荐指数
1
解决办法
3664
查看次数

prisma 错误:p1001:无法访问位于“db.xocheossqzkirwnhzxxm.supabase.co”的数据库服务器:“5432”

我开始学习 prisma 和 supabase,并希望在我的 Next.js 应用程序中实现这两种技术。运行后npx prisma migrate dev --name init我遇到了以下错误:

Environment variables loaded from .env                                                                                                                                            
Prisma schema loaded from prisma\schema.prisma
Datasource "db": PostgreSQL database "postgres", schema "public" at "db.xocheossqzkirwnhzxxm.supabase.co:5432"

Error: P1001: Can't reach database server at `db.xocheossqzkirwnhzxxm.supabase.co`:`5432`

Please make sure your database server is running at `db.xocheossqzkirwnhzxxm.supabase.co`:`5432`.
Run Code Online (Sandbox Code Playgroud)

我的数据库密码不包含任何特殊字符,这是我的 schema.prisma 文件:

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider …
Run Code Online (Sandbox Code Playgroud)

postgresql next.js prisma supabase-database

3
推荐指数
1
解决办法
1万
查看次数

在 Supabase 数据库 (postgres) 中的单个查询中更新多行

我希望通过 Supabase 中的单个查询更新多行。我正在努力寻找如何在线完成此操作的示例。

对于此示例,以下是数据如何存在于数据库的“food”表中:

ID 标题 数量
1 苹果 10
2 香蕉 8
3 芒果 4

我想做的是更新单个查询中的 3 个数量字段(此代码不起作用,但应该让您了解我所追求的内容)。

const { data: item_data, error: item_error } = await supabase
   .from('food')
   .update({ qty: 11, }).eq('id', '1')
   .update({ qty: 9, }).eq('id', '2')
   .update({ qty: 6, }).eq('id', '3')
Run Code Online (Sandbox Code Playgroud)

postgresql supabase supabase-database

3
推荐指数
1
解决办法
4086
查看次数

supabase.auth.getUser() 在 vue-router 路由防护上返回错误

我正在尝试构建一个使用 Supabase 身份验证的 Vue 应用程序。在路由器文件中的一个路由防护中,我实现了一个supabase.auth.getUser()条件,以检索用户登录状态,该条件阻止next()在用户经过身份验证之前执行:

// Route guard for auth routes
router.beforeEach((to, from, next) => {
  // const user = supabase.auth.user();
  const { data: { user } } = await supabase.auth.getUser();

  if (to.matched.some((res) => res.meta.auth)) {
    if (user) {
      next();
      return;
    }
    next({ name: "Login" });
    return;
  }
  next();
});
Run Code Online (Sandbox Code Playgroud)

但是,当我supabase.auth.getUser()在路由器防护内部实现时,我在登录之前在控制台中收到以下错误:“无效声明:缺少子声明”。登录后,错误消失。如果我从路由保护中删除supabase.auth.getUser条件,错误也会消失。经过一些额外的在线挖掘并在 jwt.io 中运行我的 Supabase 匿名密钥后,我的密钥似乎在有效负载中缺少子声明。如果这导致密钥无法正确验证,我该如何解决?

javascript vue.js vuejs3 supabase supabase-database

3
推荐指数
1
解决办法
5082
查看次数

在 next.js 中获取 supabase `user` 服务器端

我试图在服务器端获取当前登录的 supabase 用户。

我尝试过使用const user = supabase.auth.user();,但总是得到null回应。

我也尝试过const user = supabase.auth.getUserByCookie(req),但它也返回null。我想是因为从钩子调用它时我没有向 api 发送 cookie。

我尝试将user.id钩子传递到 api,但 api 没有接收参数。

我也尝试过这种方法,但从未获取令牌。req.cookies 中似乎不存在。

    let supabase = createClient(supabaseUrl, supabaseKey);
    let token = req.cookies['sb:token'];
    if (!token) {
        return 
    }
    let authRequestResult = await fetch(`${supabaseUrl}/auth/v1/user`, {
        headers: {
            'Authorization': `Bearer ${token}`,
            'APIKey': supabaseKey
        }
    });
`
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在服务器端代码中获取当前登录的用户?

next.js supabase supabase-database

2
推荐指数
1
解决办法
9847
查看次数

将 Base64 图像上传到 supabase

我的网站希望减少用户可以对图像执行的操作...因此为了增加安全性,我们希望将图像源保留为 base64 字符串而不是 supabase 存储 URL。这可以通过supabase存储实现吗?我是否必须将字符串保存在数据库中?

supabase supabase-database

2
推荐指数
1
解决办法
1561
查看次数

如何在flutter中获取supabase存储中上传媒体的url?

在颤振中根据文档上传图像是

final avatarFile = File('path/to/file');
final response = await supabase
  .storage
  .from('avatars')
  .upload('public/avatar1.png', avatarFile, fileOptions: FileOptions(
    cacheControl: '3600',
    upsert: false
  ));
Run Code Online (Sandbox Code Playgroud)

那么,我们如何获取这个上传媒体的downloadUrl呢?

flutter supabase supabase-database

2
推荐指数
1
解决办法
5173
查看次数

我无法让 Supabase 实时监听 Postgres 更改来工作

受到Supabase 文档的启发,我在 React Native 应用程序中有以下代码:

useEffect(() => {
  if (session?.user?.id === null) return
  const channel = supabase
    .channel('value-db-changes', { selfBroadcast: true })
    .on(
      'postgres_changes',
      {
        event: 'UPDATE',
        schema: 'public',
        table: 'messages',
        filter: `user_id=${session?.user?.id}`
      },
      (payload) => console.log('Supabase change', payload)
    )
    ?.subscribe()
}, [session?.user?.id])
Run Code Online (Sandbox Code Playgroud)

VSCode 警告我,当我编辑数据库中的行时,永远不会显示Property 'subscribe' does not exist on type 'never'console.log

supabase supabase-database

2
推荐指数
1
解决办法
3173
查看次数

将数据导入 Supabase 中的表

是否可以将数据导入到supabase的表中?

例如,如果我有 csv 文件或 json 文件——我可以通过 supabase 后端将该数据导入到表中吗?

supabase supabase-database

2
推荐指数
1
解决办法
4381
查看次数

如何使用 Supabase 中的 signUp() 方法在注册时添加其他用户信息

我正在尝试构建一个包含 Supabase 身份验证的 Vue.js 应用程序。我希望在注册时使用内置的 Supabase signUp() 方法来处理其他用户数据。为此,我向 SignUp 对象添加了一个属性,用于存储其他用户数据以及电子邮件和密码:

let { data, error } = await supabase.auth.signUp({
  email: 'someone@email.com',
  password: 'QQlbOIyZuwutISUzceOz',
  data: { isVendor: true }
})
Run Code Online (Sandbox Code Playgroud)

但是,当我在创建用户后运行 console.log 时,我没有看到添加到用户对象中的其他数据属性。

user_metadata我还尝试将数据分配给用户对象中的现有属性,如下所示:

let { data, error } = await supabase.auth.signUp({
  email: 'someone@email.com',
  password: 'QQlbOIyZuwutISUzceOz',
  user_metadata: { isVendor: true }
})
Run Code Online (Sandbox Code Playgroud)

然而,这也没有奏效。如何配置 signUp() 方法(或者可能是 Supabase 仪表板中的注册用户门户)来存储其他用户数据?

javascript authentication vue.js supabase supabase-database

2
推荐指数
1
解决办法
2721
查看次数

Supabase 连接和嵌套选择

假设我有 3 张表:

  • 表1(id,列1,列2)
  • 表2(id,col3,col4)
  • 表3(表1_id表2_id

我想要做的是将 Table1 和 Table2 连接起来,然后选择具有特定列值的行(例如 col4 == "123")

我尝试过的:

supabase.from("Table3").select(
 '''
  Table1 (
   col1,
   col2
  ),
  Table2 (
   col3,
   col4
  ),
 '''
).eq("Table2.col4", "123").execute();
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,对于与查询匹配的行,它返回具有 Table1 和 Table2 属性的正确对象,但对于与查询不匹配的行(因此不应返回),它返回具有 Table1 属性和 Table2 的对象属性设置为 null。

上述查询的示例:

表 1 |id | 第 1 列 | 列2| |---|------|-----| |1 | 值1 | 值2| |2 | 值3 | 值4|

表2 |id | 第 3 栏 | 第 4 栏 | …

dart flutter supabase supabase-database

1
推荐指数
1
解决办法
3959
查看次数