匿名登录详细教程

创建并使用匿名用户通过 MemFire Cloud 进行身份验证

启用匿名登录功能可构建应用程序,为用户提供经过身份验证的体验,而无需用户输入电子邮件地址、密码、使用 OAuth 提供商或提供任何其他 PII(个人身份信息)。稍后,准备就绪后,用户可以将身份验证方法链接到其帐户。

匿名用户与匿名密钥

调用signInAnonymously()会创建一个匿名用户。它就像永久用户一样,只是如果用户退出、清除浏览数据或使用其他设备,则无法访问其帐户。

与永久用户一样,authenticated使用数据 API 访问您的项目时将使用 Postgres 角色。这些用户的 JWT 将具有声明is_anonymous,您可以使用该声明在 RLS 策略中加以区分。

这与 API 密钥不同anon,API 密钥不会创建用户,并且可用于实现对数据库的公共访问,因为它使用anonymousPostgres 角色。

匿名登录可用于构建:

  • 电子商务应用,例如结账前的购物车
  • 全功能演示,不收集个人信息
  • 临时或一次性帐户

在启用匿名登录之前,请检查您现有的 RLS 政策。匿名用户使用角色authenticated。为了区分匿名用户和永久用户,您的政策需要检查is_anonymous用户的 JWT 字段。

请参阅下文的访问控制部分以了解更多详细信息。

匿名登录

JavaScript

调用signInAnonymously()方法:

await supabase.auth.signInAnonymously();

将匿名用户转换为永久用户#

将匿名用户转换为永久用户需要将身份与用户关联。这需要您在 MemFire Cloud 项目中启用手动关联。

链接电子邮件/电话身份#

JavaScript

您可以使用该updateUser()方法将电子邮件或电话身份链接到匿名用户。

await supabase.auth.updateUser(UserAttributes(email: 'example@email.com'));

链接 OAuth

JavaScript

您可以使用该linkIdentity()方法将 OAuth 身份链接到匿名用户。

await supabase.auth.linkIdentity(OAuthProvider.google);

访问控制

匿名用户authenticated就像永久用户一样承担该角色。您可以使用行级安全性 (RLS) 策略通过检查is_anonymous返回的 JWT 中的声明来区分匿名用户和永久用户auth.jwt()

create policy "Only permanent users can post to the news feed"

on news_feed as restrictive for insert

to authenticated

with check ((select (auth.jwt()->>'is_anonymous')::boolean) is false );

create policy "Anonymous and permanent users can view the news feed"

on news_feed for select

to authenticated

using ( true );
使用限制性政策

RLS 策略默认为宽容型,这意味着当应用多个策略时,它们会使用“OR”运算符组合在一起。构建限制性策略非常重要,以确保在与其他策略组合时始终强制执行对匿名用户的检查。

解决身份冲突

根据您的应用程序要求,当匿名用户转换为永久用户时可能会出现数据冲突。例如,在电子商务应用程序的上下文中,匿名用户无需注册/登录即可将商品添加到购物车中。当他们决定登录现有帐户时,您需要决定如何解决购物车中的数据冲突:

  1. 使用现有帐户中的商品覆盖购物车中的商品
  2. 使用匿名用户的商品覆盖购物车中的商品
  3. 将购物车中的商品合并在一起

自动清理

目前无法自动清理匿名用户。不过,您可以通过运行以下 SQL 从项目中删除匿名用户:

-- 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';

资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值