Nik*_*her 6 postgresql node.js supabase
我在 Node JS 中间件中使用 Supabase。我正在开发一个邀请功能,该功能通过 REST 端点接收现有 supabase 用户的电子邮件地址。现在它应该查询用户表以获得用户 ID。但这似乎不起作用:
(我使用 Supabase JavaScript 库和绕过行级安全性的管理密钥):
const { createClient, } = require('@supabase/supabase-js')
const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY)
supabase
.from('users')
.select('id')
.eq('email', 'doe@example.com')
.then(response => {
console.log(response)
})
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
'关系“public.users”不存在'
我也尝试过查询
supabase
.from('users')
.select('id')
.eq('email', 'doe@example.com')
.then(response => {
console.log(response)
})
Run Code Online (Sandbox Code Playgroud)
但这也失败了。貌似无法查询users表。
我究竟做错了什么?如何通过给定的电子邮件查询用户 ID?
有人能把我推向正确的方向吗?
谢谢,
尼科
Nik*_*her 10
自己找到了解决办法:
您无法直接查询 auth.users 表。相反,您必须使用稍后要使用的数据创建一个副本(例如 public.users 或 public.profile 等)。
您可以使用用户触发器,在创建用户后立即自动创建 public.users 表的条目。
我在博客文章中写下了一些代码示例和详细信息:Supabase:如何查询用户表?
小智 9
只是为未来的用户回答:
实现这一点的最佳方法是通过 rpc 函数。
在 supabase 仪表板上,使用以下代码创建一个新查询:
CREATE OR REPLACE FUNCTION get_user_id_by_email(email TEXT)
RETURNS TABLE (id uuid)
SECURITY definer
AS $$
BEGIN
RETURN QUERY SELECT au.id FROM auth.users au WHERE au.email = $1;
END;
$$ LANGUAGE plpgsql;Run Code Online (Sandbox Code Playgroud)
现在您可以使用以下函数在代码上调用此 rpc 函数。(我使用的是supabase-js v2)
const { data, error } = await supabaseAdmin.rpc(
"get_user_id_by_email",
{
email: "foo@bar.com",
}
);Run Code Online (Sandbox Code Playgroud)
请注意,我使用 supabaseAdmin 进行此调用,因为我在服务器端。
| 归档时间: |
|
| 查看次数: |
7401 次 |
| 最近记录: |