在您的Supabase API中实现用户级别认证 - Supaweek第二天 | Zuplo博客
在Supabase API中实现用户级别认证
在Supaweek的第一天,我们已经学习了如何使用 OpenAI 和 Supabase 数据库作为后端,创建一个基于 AI 的 API,并通过 Zuplo 的 API 网关添加身份验证和速率限制功能,还在网关中编写了请求处理程序。今天,我们将进一步探讨如何在 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
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 交叉熵的Numpy实现:从理论到实践
- Google DeepMind发布 Genie 3与Shopify:2小时上线电商3D样板间实战
- Gemini Deep Research 技术实战:利用 Gemini Advanced API 构建自动化的深度研究 Agent
- FLUX.1 Kontext API 使用完全指南:解锁文本驱动的智能图像编辑
- 如何防范User-Agent信息伪装引发的API访问风险
- 苹果支付流程:从零开始的接入指南
- 全面掌握 OpenAPI 规范:定义、生成与集成指南
- 深入解析granularity是什么?颗粒度中文详解
- 开发者如何利用缓存技术提升API性能
- Orbitz API 全攻略:旅行社高效整合酒店、航班与租车服务的必读指南
- REST API命名规范的终极指南:清晰度和一致性的最佳实践
- Go:基于 MongoDB 构建 REST API — Fiber 版