如何實現訪客模式(匿名用戶)並轉換為 Logto 用戶
了解如何使用三階段模式實現訪客模式並轉換為 Logto 用戶:管理訪客 session、以 OIDC 認證、並安全地合併訪客資料到用戶帳號。
了解如何使用三階段模式實現訪客模式並轉換為 Logto 用戶:管理訪客 session、以 OIDC 認證、並安全地合併訪客資料到用戶帳號。
許多 app 讓用戶在註冊前先試用功能,例如購物車、文件草稿或儲存偏好。用戶普遍期望這種「訪客模式」可正常運作。
但如果你用 Logto(或任何 OIDC provider)來處理身份認證,你可能會想:應該如何處理這些匿名用戶?
簡短的答案是:Logto 處理身份認證,你的 app 負責訪客 session。這是兩個不同的部分。
在本文中,我會用一個簡單的三階段模式教你如何用 Logto 實現訪客模式。你會學到如何:
你可能期望 Logto 提供「匿名登入」功能,也就是調用一個 API 就能取得 token,完全無需用戶互動。
但 OIDC 並不是這樣運作的。原因如下:
OIDC 本質講求用戶同意。 核心目的是要確定「這個人是誰?」一個匿名 token 就代表「某個人,但我們不知是誰」——這就違背了初衷。
可以這樣理解:
訪客模式屬於 session 追蹤,不是身份認證。這部分不該交由認證系統負責。
其實這對你更有利。 這樣可以劃分很清晰:
讓每個系統專注於最擅長的事情。
這個模式是:Guest → Auth → Merge
你的後端會產生和管理訪客 session。Logto 此時不參與。
當用戶有實際行動(例如加入購物車),後端會:
其實很簡單,只需一個 guest_sessions 資料表,包括 guest_id、data 和 created_at 即可。
當用戶點擊「註冊」或「登入」時,觸發 Logto OIDC 標準流程。
這期間,guest ID 依然保留在 cookie/本地存儲。認證成功後,前端會同時擁有:
現在要將兩者連接起來。調用後端 API,並同時送出:
後端必須同時驗證 兩個 token,才可合併:
只有兩個驗證都通過:
合併資料的邏輯就因不同業務而異。購物車?合併商品項目。文件草稿?換擁有者。你自行決定。
merge endpoint 是敏感操作,要注意幾點:
使用 Logto 實現訪客模式就是這簡單三步:
這個模式其實任意 OIDC provider 都用得上,不只 Logto。重點是:身份認證與 session 追蹤本來就是兩回事,就讓各系統做自己最擅長的事吧。