我們很高興地宣布 Supabase Auth 的四項新功能:
身份連結
會話控制
密碼外洩保護
帶有 Postgres 函數的 Auth Hooks
{% 嵌入 https://youtu.be/LF8GABnAFyE %}
當使用者登入時,系統會使用身份驗證方法和登入提供者建立身分。從歷史上看,如果身分與使用者共享相同的經過驗證的電子郵件,Supabase Auth 會自動將身分連結到使用者。這可以方便地刪除重複的用戶帳戶。然而,一些開發人員還需要靈活地連結不共享相同電子郵件的帳戶。
今天,我們推出身份連結,開發人員可以使用它手動連結兩個單獨的身份。我們為開發人員新增了兩個新端點來管理身分連結流程:
使用者登入後,使用「linkIdentity()」連結 OAuth 身分:
const { data, error } = await supabase.auth.linkIdentity({
provider: 'google',
})
使用 unlinkIdentity()
來取消連結身分:
// retrieve all identities linked to a user
const {
data: { identities },
} = await supabase.auth.getUserIdentities()
// find the google identity linked to the user
const googleIdentity = identities.find(({ provider }) => provider === 'google')
// unlink the google identity from the user
const { data, error } = await supabase.auth.unlinkIdentity(googleIdentity)
目前,這些方法支援連結 OAuth 身分。要將電子郵件或電話身分連結到用戶,您可以使用 [updateUser()](https://supabase.com/blog/supabase-auth-identity-linking-hooks#:~:text=can%20use% 20the -,updateUser(),-method.)方法。
預設情況下禁用手動連結。您可以在儀表板驗證設定 中為您的專案啟用它。
有關更多訊息,請參閱身份連結文件。
Supabase Auth 從使用者登入應用程式那一刻起管理整個會話生命週期。這涉及以下步驟:
為使用者建立會話。
刷新會話以使其保持活動狀態。
過期或登出時撤銷會話。
對於想要更好地控制使用者會話的開發人員,我們公開了 3 個新設定:
時間盒使用者會話: 強制使用者在一段時間間隔後再次登入。
不活動逾時: 如果使用者在一段時間內不活動,則強制使用者重新登入。
每個使用者單一會話: 將使用者限制為單一會話。保留最近的活動會話,並終止所有其他會話。
這些會話控制設定在專業版及以上版本中可用。
有關更多訊息,請參閱會話管理文件。
由於常見的使用者行為(例如選擇可猜測的密碼或在不同平台上重複使用密碼),密碼本質上可能是不安全的。
儘管 OAuth 和 magiclinks 更安全,但我們認識到密碼將繼續存在。我們希望讓用戶不易陷入潛在的陷阱。為了實現這一目標,我們在 Supabase Auth 中整合了 HaveIBeenPwned.org Pwned Passwords API,以防止使用者使用洩漏的密碼。
去圖書館
ℹ️ 我們開源了一個 Go 函式庫,用於與我們在身分驗證伺服器中使用的 HaveIBeenPwned.org Pwned 密碼 API 互動。查看 存儲庫 並隨時貢獻!
作為附加步驟,我們新增了為您的使用者指定密碼要求的功能。這可以透過儀表板: 中專案的身份驗證設定進行配置
請參閱密碼文件 以了解更多資訊。
我們收到了大量回饋,詢問如何自訂 Auth,例如:
將自訂聲明新增至存取權杖 JWT
多次嘗試 MFA 驗證失敗後註銷用戶
對密碼驗證嘗試套用自訂規則
我們的目標是保持簡單、無縫的 Supabase Auth 體驗。對於大多數開發人員來說,它應該可以輕鬆工作,而無需自訂。但是,認識到應用程式的多樣性,您現在可以透過 Auth Hook 擴展標準 Auth 功能。
Auth Hooks 只是 Postgres 函數,它們在 Auth 生命週期的關鍵點同步執行,以更改操作的結果。
例如,要使用 Auth Hooks 自訂 JWT 聲明,您可以建立一個 Postgres 函數,該函數接受第一個參數中的 JWT 聲明並傳回您希望 Supabase Auth 使用的 JWT。
假設您正在建立一個遊戲化應用程式,並且希望將用戶的層級作為自訂聲明附加到 JWT:
create function custom_access_token_hook(event jsonb)
returns jsonb
language plpgsql
as $$
declare
user_level jsonb;
begin
-- fetch the current user's level
select
to_jsonb(level) into user_level
from profiles
where
user_id = event->>'user_id'::uuid;
-- change the event.claims.level
return jsonb_set(
event,
'{claims,level}',
user_level);
end;
$$
在資料庫中建立函數後,您只需使用 Supabase Auth 註冊它:
目前,您可以為流程中的以下點註冊 Auth Hook:
自訂存取權杖: 每次產生新的 JWT 時都會呼叫。
MFA 驗證嘗試: 每次驗證 MFA 因素時都會呼叫,從而可以更好地控制檢測和阻止嘗試。
密碼驗證嘗試: 每次使用密碼登入使用者時都會呼叫,從而可以更好地控制使用者帳戶的安全性。
如果編寫 PL/pgSQL 函數不是您的強項,您始終可以使用 pg_net 向後端 API 發送請求,或使用plv8 透過用JavaScript 編寫函數來更輕鬆地操作JSON。
Auth Hooks 今天可供自架,並將於下個月推出到該平台。如果您需要盡快存取,請透過支援與我們聯繫!
那不是全部! Postgres 函數並不是寫鉤子的唯一方法。
Supabase 是 Standard Webhooks 的創始貢獻者,這是一組關於輕鬆、安全、可靠地發送和接收 Webhook 的開源工具和指南。當然,Auth Hooks 將在 2024 年第一季支援 Webhooks。
如果您從一開始就關注我們(https://supabase.com/blog/supabase-auth),您就會知道Supabase Auth 是透過分叉[Netlify 的GoTrue 伺服器](https://github.com)開始的/netlify/gotrue)。從那時起,發生了很多變化,我們已經偏離了上游儲存庫。在這個階段,將專案重新命名為其他名稱是有意義的(提示鼓聲)-Auth。
這僅僅意味著儲存庫將從使用“gotrue”重新命名為“auth”。但別擔心! Docker 映像和庫(如“@supabase/gotrue-js”)將繼續發布,只要當前 v2 版本受支持,您就可以互換使用“@supabase/auth-js”。所有類別和方法都保持不變。這裡沒有重大變化!
感謝您閱讀到最後!我們希望您喜歡第 X 週發布的 Supabase Auth 更新:身分連結、會話控制、洩露密碼保護和帶有 Postgres 功能的 Auth Hooks。
我們期待看到您使用這些新功能建立的內容,當然還有您的回饋意見,以使它們變得更好。
[第 2 天 - Edge Functions:節點和本機 npm 相容性
](https://supabase.com/blog/edge-functions-node-npm)
-第 3 天 - 介紹 Supabase Branching,這是一個針對每個拉取請求的 Postgres 資料庫
原文出處:https://dev.to/supabase/supabase-auth-identity-linking-hooks-and-haveibeenpwned-integration-19e1