以管理员身份从边缘功能访问 SUPABASE 数据库

Jac*_*n D 5 javascript firebase supabase supabase-database edge-function

我来自 Firebase 函数...我可以在哪里使用管理库从函数访问数据库,绕过所有安全规则?在supabase 上我还没有找到一种方法来做到这一点,文档非常稀缺。现在,我使用此代码作为请求该函数的用户从函数访问数据库:

const supabaseClient = createClient(
      Deno.env.get("SUPABASE_URL") ?? "",
      Deno.env.get("SUPABASE_ANON_KEY") ?? "",
      { global: { headers: { Authorization: req.headers.get("Authorization")! } } }
    );
Run Code Online (Sandbox Code Playgroud)

但是对于我的一个功能,我必须绕过所有策略进行访问,因为该功能是“admin”,当我删除此代码中的第三个参数行时(这是我发现的唯一模糊的解释如何做到这一点)我得到错误:

AuthApiError:无效声明:缺少子声明...

我也尝试更改SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY,同样的错误。

Rob*_*har 3

使用服务角色密钥绕过安全规则,请确保您拥有有效的服务密钥角色。

您使用的密钥Deno.env.get("SUPABASE_ANON_KEY") ?? 它具有匿名访问权限,不会绕过安全规则。

const supabaseClient = createClient(
Deno.env.get("SUPABASE_URL") ?? "",
Deno.env.get("SUPABASE_SERVICE_ROLE_KEY") ?? "",
Deno.env.get("SUPABASE_SERVICE_ROLE_KEY") ?? "",
{ global: { headers: { Authorization: `Bearer ${Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")}` } } });
Run Code Online (Sandbox Code Playgroud)

将“SUPABASE_SERVICE_ROLE_KEY”替换为实际服务角色密钥的值以绕过安全规则。