Supabase Auth 现已支持匿名登录
Supabase Auth 现在支持匿名登录,这是社区最需要的功能之一。
匿名登录可用于创建尚未注册您应用的临时用户。由于新用户无需提供任何注册凭证,因此可以降低他们试用产品的门槛。
启用匿名登录
您现在可以从仪表板为您的项目启用匿名登录:
对于本地开发,请升级您的 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
表中:
ID | 角色 | 电子邮件 | 是匿名的 |
---|---|---|---|
e053e470-afa1-4625-8963-37adb862fd11 | 已认证 | 无效的 | 真的 |
5563108e-ac81-4063-9288-4f3db068efa1 | 已认证 | luke@starwars.com | 错误的 |
匿名用户可以通过is_anonymous
用户 JWT 中返回的声明进行识别,该声明可通过行级安全策略 (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 提供了两种方法来实现这一点:
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 政策并突出显示那些允许匿名用户访问的政策 - 请继续关注本月晚些时候的更新!
入门
- 文档:匿名登录
- API 方法参考:Javascript、Flutter、Swift
更多关于 GA 周的信息
鏂囩珷鏉ユ簮锛�https://dev.to/supabase/supabase-auth-now-supports-anonymous-sign-ins-1j00