Supabase Auth 現在支援匿名登錄,這是社群最需要的功能之一。

{% cta https://supabase.com/ga-week %} ⚡️ 了解有關 GA 週的更多資訊 {% endcta %}

匿名登入可用於建立尚未註冊您的應用程式的臨時使用者。這降低了新用戶試用您的產品的阻力,因為他們不必提供任何註冊憑證。

{% 嵌入 https://youtu.be/WNN7Pp5Ftk4 %}

啟用匿名登入

您今天可以從儀表板為您的專案啟用匿名登入

啟用功能截圖

對於本機開發,請升級 Supabase CLI 並將設定新增至config.toml檔案:

[auth]
enable_anonymous_sign_ins = true

現在您可以透過JavascriptFlutterSwift SDK 建立匿名使用者。以下是如何使用supabase-js建立匿名用戶。

const { data, error } = await supabase
  .auth
  .signInAnonymously()

術語

使用匿名登入建立的個人資料也會經過authenticated

呼叫.signInAnonymously()後,您已將使用者移至驗證流程,我們將他們視為登入使用者:

範例圖

限制匿名用戶的存取

與永久使用者一樣,匿名使用者也保留在auth.users表中:

|編號 |角色 |電子郵件 |是_匿名 |

| ------------------------------------------------ | ------------- | ----------------- | ------------ |

| e053e470-afa1-4625-8963-37adb862fd11 |已驗證 |空|真實 |

| 5563108e-ac81-4063-9288-4f3db068efa1 |已驗證 | [email protected] |假 |

匿名用戶可以透過用戶 JWT 中傳回的is_anonymous聲明來辨識,該聲明可從行級安全策略 (RLS) 存取。如果您想限制對應用程式中某些功能的存取,這會很有幫助。

例如,假設我們有一個線上論壇,用戶可以在其中建立和閱讀貼文。

給定這個表來儲存帖子:

create table public.posts (
  id serial primary key,
  name text not null,
  description text
);

如果我們只想允許永久用戶建立帖子,我們可以透過檢查 JWT select auth.jwt() ->> 'is_anonymous'來檢查使用者是否是匿名的。

在 RLS 策略中使用此函數:

create policy "Only permanent users can create posts"
on public.posts
for insert
to authenticated -- Note: user is still authenticated
with check (
  (select auth.jwt() ->> 'is_anonymous')::boolean is false
);

RLS 為我們提供了建立各種規則的充分靈活性。

例如,允許永久用戶對所有帖子進行讀取存取,並限制匿名用戶只能存取今天建立的帖子:

create policy "Limit access to anonymous users"
on public.posts
for select
to authenticated -- Note: user is still authenticated
using (
  case
    when (select (auth.jwt() ->> 'is_anonymous'))::boolean is true
    then (created_at >= current_date)
  else
    true
  end
);

將匿名用戶轉換為永久用戶

在某些時候,匿名用戶可能決定他們想要建立一個貼文。我們在這裡提示他們註冊一個帳戶,將他們轉換為永久用戶。

當匿名使用者俱有與其關聯的身份時,他們被視為永久使用者。

轉換後,使用者 ID 保持不變,這表示與使用者 ID 關聯的任何資料都將被保留。

Supabase Auth 提供了 2 種方法來實現此目的:

1-連結電子郵件或電話身份

2-連結 OAuth 身份

連結電子郵件或電話身份

若要連結電子郵件或電話身分:

const { data, error } = await supabase
  .auth
  .updateUser({ email })

連結 OAuth 身份

要將 OAuth 身分連結到匿名用戶,您需要為專案啟用手動連結。了解身分連結如何與 Supabase Auth 配合使用。

打開

啟用後,您可以呼叫linkIdentity()方法:

const { data, error } = await supabase
  .auth
  .linkIdentity({ provider: 'google' })

冒充匿名用戶

在建立 RLS 策略來區分匿名使用者的存取權時,您可以利用 SQL 編輯器中的使用者模擬功能來測試您的策略:

助理截圖

SQL 編輯器中的資料庫角色設定。您可以從下拉清單中選擇使用者來模擬匿名使用者。

使用者管理畫面提供了匿名使用者過濾的選項,這可以幫助了解已建立了多少匿名使用者。

工具截圖

下一步是什麼

管理匿名用戶可能很棘手,尤其是當您的網站有大量訪客時。我們正在開發「自動清理」選項,以刪除超過 30 天不活動的匿名用戶。同時,由於匿名使用者儲存在資料庫的 auth 模式中,因此您可以透過執行下列查詢來清理孤立的匿名使用者:

-- deletes anonymous users created more than 30 days ago
delete from auth.users
where is_anonymous is true and created_at < now() - interval '30 days';

我們也正在開發linter,以檢查您的 RLS 策略並突出顯示那些允許匿名用戶存取的策略 - 請繼續關注本月稍後的更新!

入門

更多關於 GA 週的訊息

](https://supabase.com/blog/branching-publicly-available)


原文出處:https://dev.to/supabase/supabase-auth-now-supports-anonymous-sign-ins-1j00


共有 0 則留言