【问题标题】:How can I implement this functionality with Supabase?如何使用 Supbase 实现此功能?
【发布时间】:2022-01-17 21:54:03
【问题描述】:

我正在开发一个网络应用程序。 Vue + Supabase。 申请中有两个登记表。一种是普通用户,一种是特殊用户。 普通用户可以轻松注册,但特殊用户必须输入一个在后台生成的特殊代码,当管理员点击“添加代码”按钮时,该代码必须在注册成功后删除。 如何实现这样的功能?注册后删除代码是可以理解的 - 一个简单的触发器,添加 - 一个简单的管理员角色检查(行策略)。但是如何实现注册时的检查呢?

原则上,用户很少,也不会尝试破解应用程序,但我仍然不想在前面做过滤器。比如:

supabase
    .from('verif_codes')
    .select('*')
    .eq('code', this.userEnteredCode)
    .then(res => {
        if (res.data.length === 0){
            this.errors.code = true;
        } else {
            supabase.singUp(...)
        }
    });

谢谢!!

【问题讨论】:

  • 您可以使用行级安全性 - 我会假设。这里不是 Supbase 用户...
  • @madflow,是的,我怀疑。我需要知道“究竟如何”来做到这一点。有什么具体帮助吗?也许有些教训?找了半天也没找到(((

标签: postgresql supabase


【解决方案1】:

supabase.signUp() 调用如果成功则在 auth.users 表中插入一个新行。这意味着您可以在附加到auth.users 表的触发器中实现您想要的。

例如:

  1. 您可以将代码传递给supabase.signUp方法的options.data参数
  2. options.data 参数内的数据存储在auth.users 表的raw_user_meta_data 列中
  3. 给定上面的 (1) 和 (2),您可以在 auth.users 表上创建一个 BEFORE INSERT 触发器并检查代码(可以这样访问:NEW.raw_user_meta_data->>'myCodeField')是否确实存在于表中您存储您的代码(仍应使用 RLS 或其他某种机制进行保护,以确保没有人可以篡改它们)
  4. 如果代码不存在,您可以通过抛出异常(例如使用RAISE EXCEPTION)或仅从触发函数返回 NULL 来中止插入(这实际上会中止注册)

【讨论】:

  • 非常感谢!!第 1 点和第 2 点对我来说很清楚。但是对于第 3 点,对我来说一切都不是那么顺利。创建触发器的时候,我指定users表,ok,我指定INSERT,ok,我指定BEFORE,这里也一切正常。但最后有一段“选择要触发的功能”。当我点击它时,我会进入我的功能列表。好的,点击“创建新功能”。 Schema:auth 返回类型:trigger 我添加了new参数,jsonb类型(不知道哪个是正确的)。
  • 在正文中我指定:NEW.raw_user_meta_data->> 'code' 我知道这段代码只是从用户那里获取代码字段,但我不知道接下来要写什么。以及如何查询“代码”表?在 supabase 中是怎么做的?
  • 是这样的吗?从邀请代码中选择 * /* ? / where code = USER.raw_user_meta_data->>'code'; / ? / 如果没有找到则 / ? /返回空值;万一;返回真; / ? */
  • 您在第一条评论中的描述听起来像是您正在使用 Supabase 仪表板 - 恐怕我无法帮助您,因为我不使用它(我使用常规 SQL 客户端)。注意,Supabase 只给你一个普通的 PostgreSQL 数据库——所以你可以对 PostgreSQL 数据库运行的任何查询,你也可以对你的 Supabase 实例运行。最后,您在上一条评论中的代码看起来与我期望看到的非常接近,因此您走在正确的轨道上。
猜你喜欢
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2021-08-01
相关资源
最近更新 更多