我正在构建一个多租户应用程序,并在添加指向同一个表的多个关系后遇到错误:
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) 我正在尝试在 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 消息。
我如何在这里创建基于角色的策略?提前致谢!
我正在使用 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
我开始学习 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) 我希望通过 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) 我正在尝试构建一个使用 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 匿名密钥后,我的密钥似乎在有效负载中缺少子声明。如果这导致密钥无法正确验证,我该如何解决?
我试图在服务器端获取当前登录的 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)
有谁知道如何在服务器端代码中获取当前登录的用户?
我的网站希望减少用户可以对图像执行的操作...因此为了增加安全性,我们希望将图像源保留为 base64 字符串而不是 supabase 存储 URL。这可以通过supabase存储实现吗?我是否必须将字符串保存在数据库中?
在颤振中根据文档上传图像是
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呢?
受到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的表中?
例如,如果我有 csv 文件或 json 文件——我可以通过 supabase 后端将该数据导入到表中吗?
我正在尝试构建一个包含 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 仪表板中的注册用户门户)来存储其他用户数据?
假设我有 3 张表:
我想要做的是将 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 栏 | …
supabase ×12
next.js ×3
postgresql ×3
flutter ×2
javascript ×2
vue.js ×2
dart ×1
prisma ×1
reactjs ×1
vuejs3 ×1