身份关联
管理用户关联的身份信息
身份关联策略
目前,Supabase Auth 支持两种将身份关联到用户的策略:
自动关联
Supabase Auth 会自动将相同邮箱地址的身份关联到同一用户。当提供多个OAuth登录选项时,这有助于提升用户体验,因为用户无需记住他们使用哪个OAuth账户注册。当新用户通过OAuth登录时,Supabase Auth会尝试查找使用相同邮箱地址的现有用户。如果找到匹配项,新身份将被关联到该用户。
为了使自动关联能正确识别要关联的用户,Supabase Auth需要确保所有用户邮箱地址都是唯一的。将身份自动关联到邮箱未验证的用户也是不安全的做法,因为这可能导致账户接管攻击。为防止这种情况发生,当新身份可被关联到现有用户时,Supabase Auth会移除该用户关联的所有其他未确认身份。
通过SAML单点登录注册的用户不会被作为自动关联的目标考虑。
手动身份关联(测试版)
Supabase Auth 允许已登录用户使用不同邮箱地址发起身份关联。要将 OAuth 身份关联到用户,请调用 linkIdentity()
方法:
1const { , } = await ..({ : 'google' })
在上述示例中,用户将被重定向至 Google 完成 OAuth2.0 流程。当 OAuth2.0 流程成功完成后,用户将被重定向回应用程序,且 Google 身份将关联至该用户。您可以通过项目的认证配置选项启用手动关联功能,或在自托管时设置环境变量 GOTRUE_SECURITY_MANUAL_LINKING_ENABLED: true
。
解绑身份认证
您可以使用 getUserIdentities()
获取用户关联的所有身份认证。然后调用 unlinkIdentity()
来解绑身份。用户需要已登录且至少关联2个身份才能解绑现有身份。
123456789101112// 获取用户关联的所有身份const { : , : } = await ..()if (!) { // 查找用户关联的Google身份 const = ..(() => . === 'google') if () { // 解绑用户的Google身份 const { , } = await ..() }}
常见问题
如何为OAuth账户添加邮箱/密码登录?
调用 updateUser({ password: 'validpassword'})
方法,可以为通过OAuth提供商(Google、GitHub等)创建的账户添加邮箱和密码认证方式。
已使用OAuth登录后还能用邮箱注册吗?
如果您尝试使用与OAuth相同的邮箱创建邮箱账户,将会收到一个经过混淆处理的用户响应,且不会发送验证邮件。这是为了防止用户枚举攻击。