在您的Supabase API中实现用户级别认证 - Supaweek第二天 | Zuplo博客
在Supabase API中实现用户级别认证
在Supaweek的第一天,我们已经学习了如何使用 Zuplo 的 API 网关添加身份验证和速率限制功能,还在网关中编写了请求处理程序。今天,我们将进一步探讨如何在 API 中动态处理用户请求,实现用户级别的身份认证。
用户级别认证的必要性
为 API 请求?
通常情况下,如果使用 JWT(JSON Web Token),可以将声明(claims)添加到令牌中,然后通过编程来处理这些声明。然而,Zuplo 的默认身份验证机制是基于 API 密钥的,而 API 密钥只是一个不透明的短字符串。那么,如何在这种情况下实现用户级别的差异化处理呢?
API密钥的灵活性与定制化
Zuplo 提供了一种灵活的 API 密钥机制,使其既简单易用,又具备高度的定制化能力。我们将在今天的教程中展示如何通过 API 密钥实现用户级别认证。
在本教程中,我们将基于第一天创建的 API 继续构建,确保您已经部署并准备好开始。
在API中添加用户组织标识(orgId)
我们将通过以下步骤为 API 添加用户组织标识(orgId),并基于此标识过滤用户请求:
-
在数据库中添加
orgId字段在 Supabase 数据库的
blogs表中添加一个名为orgId的列,更新后的表结构如下所示:ALTER TABLE blogs ADD COLUMN orgId INTEGER; -
修改请求处理程序
对于
GET和POST操作,我们需要修改请求处理程序,根据用户的orgId来过滤请求。Zuplo 会将 API 密钥的元数据填充到
request.user对象中,因此我们可以通过request.user.data?.orgId提取orgId。如果用户未通过身份验证,request.user对象将为undefined。示例:GET 请求处理程序
const url = ${env.SUPABASE_URL}/rest/v1/blogs?orgId=eq.${request.user.data?.orgId};

-
创建 API 密钥并添加元数据
在 Zuplo 的项目设置中,导航到 API 密钥使用者 > 添加新使用者,创建一个新的 API 密钥,并在元数据中添加
orgId字段。此时,您可以将管理器字段留空。
生成的 API 密钥需要保存下来,因为后续步骤中会用到。
测试用户级别认证功能
创建博客(POST 操作)
使用测试控制台,通过 POST 操作创建一个博客:
-
在请求头中添加 API 密钥:
Authorization: Bearer zpka_134 -
设置请求正文:
{ "topic": "your blog topic" } -
点击 测试 按钮,完成请求。

根据用户组织标识过滤博客(GET 操作)
通过 GET 操作发出请求,API 将根据用户的 orgId 返回对应的博客数据。例如:
[
{
"id": 2,
"orgId": 2,
"created_at": "2023-09-06T18:01:12.774955+00:00",
"content": "驾驶很难。",
"title": "探索不同的视角"
}
]
如果使用具有不同 orgId 的 API 密钥发出请求,则会返回一个空数组。
总结
通过在 API 密钥中添加 orgId 并在请求处理程序中根据该标识过滤请求,我们成功实现了用户级别的身份认证。这种方法不仅充分利用了 Zuplo 的 API 密钥机制,还确保了系统的灵活性和安全性。
接下来,请关注 Supaweek 第三天的内容,我们将探讨如何使用 Zuplo API 自动生成 API 文档!
原文链接: https://zuplo.com/blog/2023/09/26/handling-user-requests-dynamically
最新文章
- 古籍OCR API:让中华古籍文化焕发新生
- 如何在Java、Python语言中调用Mistral AI API:提示词生成文本案例
- AI的突出问题:API安全
- 如何在 Angular 中实现 REST API 调用:博客应用示例解析
- 如何获取bing搜索 API Key 密钥(分步指南)
- 银行卡认证API在Java、Python、PHP中的使用教程
- 如何使用API:初学者的分步教程
- 深入解析 Azure OpenAI Assistants API
- OpenAI Assistant API:实现交互式聊天机器人
- 深入解析Vue Composition API的watch()方法 – Netlify
- 供应链管理中的 EDI 与 API 趋势解析
- 提升 API 和数据库性能的有效策略