Supabase Auth 現在支援匿名登錄,這是社群最需要的功能之一。
{% cta https://supabase.com/ga-week %} ⚡️ 了解有關 GA 週的更多資訊 {% endcta %}
匿名登入可用於建立尚未註冊您的應用程式的臨時使用者。這降低了新用戶試用您的產品的阻力,因為他們不必提供任何註冊憑證。
{% 嵌入 https://youtu.be/WNN7Pp5Ftk4 %}
您今天可以從儀表板為您的專案啟用匿名登入:
對於本機開發,請升級 Supabase CLI 並將設定新增至config.toml
檔案:
[auth]
enable_anonymous_sign_ins = true
現在您可以透過Javascript 、 Flutter或Swift 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 身分連結到匿名用戶,您需要為專案啟用手動連結。了解身分連結如何與 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 策略並突出顯示那些允許匿名用戶存取的策略 - 請繼續關注本月稍後的更新!
文件:匿名登入
API方法參考: Javascript 、 Flutter 、 Swift
更多關於 GA 週的訊息
](https://supabase.com/blog/branching-publicly-available)
原文出處:https://dev.to/supabase/supabase-auth-now-supports-anonymous-sign-ins-1j00