如何防止 Firebase 身份验证在首次登录时隐式创建新用户?

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

我有一个 Firebase 支持的 React Native 应用程序,允许客户通过电子邮件/密码、Google ID 或 Apple ID 登录。它主要工作正常,但我注意到一个用户体验问题,该问题源于

signInWithCredential
方法的行为,该方法在首次登录时隐式创建新用户

您可以通过调用 createUserWithEmailAndPassword 方法或使用联合身份提供商(例如 Google Sign-In 或 Facebook Login)首次登录用户来在 Firebase 项目中创建新用户。

https://firebase.google.com/docs/auth/web/manage-users#create_a_user

这看起来很方便,意味着我的“注册”或“注册”功能与我的“登录”功能基本相同。

但是从客户的角度来看,这很令人困惑。例如。如果他们进入应用程序并忘记使用电子邮件/密码进行注册,然后单击“使用 Google 登录”,在 OAuth 弹出窗口中单击“接受”,然后他们将登录到以前从未使用过的全新帐户,并且当然,他们之前的数据/历史记录/购买都不存在。

如果新客户通过 OAuth 登录,我希望收到 auth/user-not-found

 错误
,如 在此处的 API 文档中列出,以便我可以呈现“您没有帐户”的“正常”UX有了这些凭据,请先注册”或类似的内容以施加一些摩擦并帮助用户意识到他们走错了路。即我希望注册完全独立于登录,并防止创建意外的虚假帐户。

顺便说一句,我了解(并且已经测试过),如果客户随后使用共享已注册的相同电子邮件地址的第二个提供商,那么 Firebase 会采取一些巧妙的措施来迁移或统一帐户。但我无法确定客户的 Google ID 是否与他们在创建电子邮件/密码帐户时使用的电子邮件相匹配(例如工作与个人或其他原因),因此仍然会存在重复/虚假帐户。还有

“每个电子邮件一个帐户”选项 可以对此进行调整)

我实际上觉得奇怪的是,似乎没有任何关于这一点的讨论,因为缺乏“不自动注册”标志阻止了典型的用户体验支持“这里是新的?注册”入门与“新在这里注册”之间的明显区别. 现有客户的“有帐户吗?登录”。所以也许我错过了一些明显的东西。

javascript firebase react-native firebase-authentication oauth
2个回答
1
投票
与几个人讨论后,我有一个初步的答案 - 你无法阻止它。

这似乎是 Firebase 等身份验证提供商的标准行为,显然大多数人都会期望这种用户体验。我只是必须属于少数。


0
投票

供日后参考

您的 Firebase 项目具备此能力:

    转至身份验证 > 设置 > 用户操作
  1. 取消选中“启用创建(注册)”
  2. 点击保存
现在,当新用户尝试使用 Google 或其他提供商登录时,将返回错误“Firebase:错误(auth/admin-restricted-operation)”,您将能够在代码中处理此问题。

enter image description here

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