认证

身份关联

管理用户关联的身份信息


身份关联策略

目前,Supabase Auth 支持两种将身份关联到用户的策略:

  1. 自动关联
  2. 手动关联(测试版)

自动关联

Supabase Auth 会自动将相同邮箱地址的身份关联到同一用户。当提供多个OAuth登录选项时,这有助于提升用户体验,因为用户无需记住他们使用哪个OAuth账户注册。当新用户通过OAuth登录时,Supabase Auth会尝试查找使用相同邮箱地址的现有用户。如果找到匹配项,新身份将被关联到该用户。

为了使自动关联能正确识别要关联的用户,Supabase Auth需要确保所有用户邮箱地址都是唯一的。将身份自动关联到邮箱未验证的用户也是不安全的做法,因为这可能导致账户接管攻击。为防止这种情况发生,当新身份可被关联到现有用户时,Supabase Auth会移除该用户关联的所有其他未确认身份。

通过SAML单点登录注册的用户不会被作为自动关联的目标考虑。

手动身份关联(测试版)

Supabase Auth 允许已登录用户使用不同邮箱地址发起身份关联。要将 OAuth 身份关联到用户,请调用 linkIdentity() 方法:

1
const { , } = await ..({ : 'google' })

在上述示例中,用户将被重定向至 Google 完成 OAuth2.0 流程。当 OAuth2.0 流程成功完成后,用户将被重定向回应用程序,且 Google 身份将关联至该用户。您可以通过项目的认证配置选项启用手动关联功能,或在自托管时设置环境变量 GOTRUE_SECURITY_MANUAL_LINKING_ENABLED: true

解绑身份认证

您可以使用 getUserIdentities() 获取用户关联的所有身份认证。然后调用 unlinkIdentity() 来解绑身份。用户需要已登录且至少关联2个身份才能解绑现有身份。

1
2
3
4
5
6
7
8
9
10
11
12
// 获取用户关联的所有身份const { : , : } = await ..()if (!) { // 查找用户关联的Google身份 const = ..(() => . === 'google') if () { // 解绑用户的Google身份 const { , } = await ..() }}

常见问题

如何为OAuth账户添加邮箱/密码登录?

调用 updateUser({ password: 'validpassword'}) 方法,可以为通过OAuth提供商(Google、GitHub等)创建的账户添加邮箱和密码认证方式。

已使用OAuth登录后还能用邮箱注册吗?

如果您尝试使用与OAuth相同的邮箱创建邮箱账户,将会收到一个经过混淆处理的用户响应,且不会发送验证邮件。这是为了防止用户枚举攻击。