我是 Next.js 和 Supabase 的新手。我正在使用 Replicate 中的 Webhook 来接收来自图像生成过程的数据。我的目标是将这些数据存储在我的 Supabase 数据库中。这是我编写的用于将生成的图像上传到 Supabase 的函数:
export async function uploadGeneratedImagesToSupabase(original_image_cloudinary_public_id: string, cloudinary_public_id: string[]) {
const supabase = createClient();
const {data, error} = await supabase
.from('generated_images')
.insert({original_image_cloudinary_public_id, cloudinary_public_id})
.single();
if (error) {
return {error: error};
}
revalidatePath('/create');
return {data: data};
}
我认为因为 webhook 不是从应用程序内获取的,supabase 无法识别经过身份验证的用户并抛出以下错误:
error: {
code: '42501',
details: null,
hint: null,
message: 'new row violates row-level security policy for table "generated_images"'
}
有人知道如何解决这个问题或如何解决它吗?
(也许我必须重新设计通过网络钩子接收数据的整个结构)
谢谢!
我已经获得了使用服务角色密钥来存储数据的信息,但是如何参考生成图像的用户来存储生成的图像?
我假设您正在 Next.js 创建的端点上接收 Webhook。初始化 Supabase 时,您可以使用服务角色密钥代替匿名密钥来初始化 Supabase 客户端。使用服务角色密钥初始化的 Supabase 客户端可以绕过 RLS 策略。
请注意,您永远不应该在前端公开服务角色密钥,因为用户在获得任何数据库后就可以访问该数据库。