我們很高興地宣布 Supabase Auth 的四項新功能:

  1. 身份連結

  2. 會話控制

  3. 密碼外洩保護

  4. 帶有 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 從使用者登入應用程式那一刻起管理整個會話生命週期。這涉及以下步驟:

  1. 為使用者建立會話。

  2. 刷新會話以使其保持活動狀態。

  3. 過期或登出時撤銷會話。

對於想要更好地控制使用者會話的開發人員,我們公開了 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 Hooks

目前,您可以為流程中的以下點註冊 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。

我們期待看到您使用這些新功能建立的內容,當然還有您的回饋意見,以使它們變得更好。

更多發布第 X 週

](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


共有 0 則留言