postgresql Supabase:从客户端更新/删除身份验证用户中的条目

lfapxunr  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(170)

我从supabase docsthis discussion中了解到,我们可以将service_role key传递给supabaseClient,从而绕过RLS(行级安全性),因此能够访问/修改客户端auth.users表中的数据。
现在,我将使用supabase客户机的第二个示例在需要时对auth.users表执行更新。

import { createClient } from "@supabase/supabase-js"; // version  "2.0.4"

const {
  VITE_PROJECT_URL,
  VITE_ANON_PUB,
  VITE_SERVICE_ROLE,
} = import.meta.env

export const supabase = createClient(VITE_PROJECT_URL, VITE_ANON_PUB); // 1. regular client

export const supabaseAdmin = createClient(VITE_PROJECT_URL, VITE_SERVICE_ROLE) // 2. admin client

此方法在开发模式下非常有效:我可以更新/删除授权用户中的条目。

// works in Dev, Error in Prod
 const { data } = await supabaseAdmin.auth.admin.deleteUser(customer.auth_id);

// example from docs: slightly different syntax 
const { data: user, error } = await supabase.auth.api.deleteUser(
  '715ed5db-f090-4b8c-a067-640ecee36aa0'
)

但是,这在生产中不起作用。得到以下错误:Uncaught Error: supabaseKey is required .
话虽如此,我的问题是:我应该如何部署与auth.users表交互的代码呢?我需要一个服务器函数来完成这个任务吗?(顺便说一句,我已经试过了,但是有同样的问题supabaseKey is required

pbpqsu0x

pbpqsu0x1#

为了记录在案,设法修好了🎉!
这个错误是由于我的主机提供商(netlify)的环境变量设置不好造成的。完全是一个愚蠢的错误,我是唯一的责任人
不过,我在调试过程中学到了一些东西,希望在此分享以供参考

错误#1

无论你使用什么平台来托管应用程序(netlify,vercel等),都要仔细检查env变量的设置,这可以保存你几个小时的无用挫折...🤦🏽

第二个错误

Supabase文档一直在说:不要在前端代码中使用你的service_role。所以如果你没有后端,使用云函数来完成这项工作。现在几乎所有的提供商都有这个功能。

错误3

在服务器端函数respose中不设置access-control-allow-origin头文件。

相关问题