為 API 請求?
通常情況下,如果使用 JWT(JSON Web Token),可以將聲明(claims)添加到令牌中,然后通過編程來處理這些聲明。然而,Zuplo 的默認(rèn)身份驗證機制是基于 API 密鑰的,而 API 密鑰只是一個不透明的短字符串。那么,如何在這種情況下實現(xiàn)用戶級別的差異化處理呢?
Zuplo 提供了一種靈活的 API 密鑰機制,使其既簡單易用,又具備高度的定制化能力。我們將在今天的教程中展示如何通過 API 密鑰實現(xiàn)用戶級別認(rèn)證。
在本教程中,我們將基于第一天創(chuàng)建的 API 繼續(xù)構(gòu)建,確保您已經(jīng)部署并準(zhǔn)備好開始。
我們將通過以下步驟為 API 添加用戶組織標(biāo)識(orgId),并基于此標(biāo)識過濾用戶請求:
在數(shù)據(jù)庫中添加orgId字段
在 Supabase 數(shù)據(jù)庫的 blogs 表中添加一個名為 orgId 的列,更新后的表結(jié)構(gòu)如下所示:
ALTER TABLE blogs ADD COLUMN orgId INTEGER;
修改請求處理程序
對于 GET 和 POST 操作,我們需要修改請求處理程序,根據(jù)用戶的 orgId 來過濾請求。
Zuplo 會將 API 密鑰的元數(shù)據(jù)填充到 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};

創(chuàng)建 API 密鑰并添加元數(shù)據(jù)
在 Zuplo 的項目設(shè)置中,導(dǎo)航到 API 密鑰使用者 > 添加新使用者,創(chuàng)建一個新的 API 密鑰,并在元數(shù)據(jù)中添加 orgId 字段。此時,您可以將管理器字段留空。

生成的 API 密鑰需要保存下來,因為后續(xù)步驟中會用到。
使用測試控制臺,通過 POST 操作創(chuàng)建一個博客:
在請求頭中添加 API 密鑰:
Authorization: Bearer zpka_134
設(shè)置請求正文:
{
"topic": "your blog topic"
}
點擊 測試 按鈕,完成請求。

通過 GET 操作發(fā)出請求,API 將根據(jù)用戶的 orgId 返回對應(yīng)的博客數(shù)據(jù)。例如:
[
{
"id": 2,
"orgId": 2,
"created_at": "2023-09-06T18:01:12.774955+00:00",
"content": "駕駛很難。",
"title": "探索不同的視角"
}
]
如果使用具有不同 orgId 的 API 密鑰發(fā)出請求,則會返回一個空數(shù)組。
通過在 API 密鑰中添加 orgId 并在請求處理程序中根據(jù)該標(biāo)識過濾請求,我們成功實現(xiàn)了用戶級別的身份認(rèn)證。這種方法不僅充分利用了 Zuplo 的 API 密鑰機制,還確保了系統(tǒng)的靈活性和安全性。
接下來,請關(guān)注 Supaweek 第三天的內(nèi)容,我們將探討如何使用 Zuplo API 自動生成 API 文檔!
原文鏈接: https://zuplo.com/blog/2023/09/26/handling-user-requests-dynamically