如何编辑或删除 FirebaseAuth 用户的电话或电子邮件?切换后,他们的旧登录凭据会怎样?

问题描述 投票:0回答:1

我正在使用 Flutter 开发一个应用程序,允许用户编辑其登录凭据,但有关 FirebaseAuth 的文档非常有限,而且我发现电话和电子邮件之间存在差异。

我很好奇(但找不到)的是如何从同时具有电子邮件和电话的帐户中删除电子邮件 - 以便我只能使用电话登录?

flutter firebase-authentication google-sso
1个回答
0
投票

所以我做了一些实验,我分享结果希望能帮助别人(因为如果我有这些信息,它会节省我很多时间和挫败感)。

尤其是编辑电子邮件的行为方式相当出乎意料。

我实验了3种场景:手机登录、Google登录和无密码登录。 FirebaseAuth User 对象有两个与访问权限相关的字段:

providerData
userInfo

1.手机登录

[{
email: null
isEmailVerified: true
phoneNumber: "+1 123-456-7890"
providerId: "phone"
uid: "+1 123-456-7890"
...
}]

用户信息:

email: null
isEmailVerified: false
phoneNumber: "+1 123-456-7890"
providerId: null
uid: "uid1"
...

1.1 解除手机绑定

对于用户对象

user
调用
user.unlink("phone")

→ 擦除providerData并修改userInfo - 删除phoneNumber
→ 无法再使用 +1 123-456-7890 登录

1.2 编辑手机

对于用户对象

user
调用
user.linkWithCredential(credential)

→ 将providerData替换为新的电话并将userInfo修改为新的phoneNumber
→ 无法再使用+1 123-456-7890登录,可以使用新的登录

邮箱登录

提供商数据:

[{
email: "[email protected]"
isEmailVerified: true
phoneNumber: null
providerId: "google.com"
uid: "71593587134053905"
...
}]

用户信息:

email: "[email protected]"
isEmailVerified: true
phoneNumber: null
providerId: null
uid: "uidmail1"
...

2.1 取消电子邮件链接

对于用户对象

user
调用
user.unlink("google.com")

→ 擦除providerData而不修改userInfo。所以我仍然可以使用电子邮件登录

2.2 编辑电子邮件

发送验证电子邮件并应用操作代码。 → 发送验证电子邮件后,FirebaseAuth 用户没有任何变化
→ 更改为

[email protected]
后:

2.2.1 我仍然可以使用旧电子邮件登录

→ 我仍然可以使用

[email protected]

登录 → 如果我还没有使用
[email protected]
登录,那么 即使 userInfo 包含
[email protected]
,providerData 也只包含 
[email protected]
→ 只有当我使用
[email protected]
登录时,它才会添加到providerData,然后它包含两个项目:

[{
email: "[email protected]"
isEmailVerified: true
phoneNumber: null
providerId: "google.com"
uid: "71593587134053905"
},{
email: "[email protected]"
isEmailVerified: true
phoneNumber: null
providerId: "google.com"
uid: "90839670913908504"
...
}]

2.2.2 我可以将旧电子邮件分配给另一个帐户

→ 因此,如果另一个带有电话的帐户仅链接到电子邮件“[email protected]”,则 FirebaseAuth 有两个用户与该电子邮件连接。但是,当使用“[email protected]”登录时,我仍然以旧帐户登录(现在用户信息电子邮件“[email protected]”)

2.2.3 再次取消链接

→ 擦除providerData,userInfo 保持与之前相同 → 现在“[电子邮件受保护]”不再以任何方式与旧帐户相关联,登录后会打开新帐户

3 无密码登录

取消链接会擦除providerData,userInfo保持与以前相同,因此我可以再次使用电子邮件登录

© www.soinside.com 2019 - 2024. All rights reserved.