【问题标题】:Firebase Authentication : Lookup a user by EmailFirebase 身份验证:通过电子邮件查找用户
【发布时间】:2022-02-23 11:08:32
【问题描述】:

我正在使用Firebase Authentication with Email and Password

我想知道我是否只能通过电子邮件“查找”用户,同时也不能以用户身份登录

我想这样做的原因是,仅使用电子邮件地址来识别我是否已经是系统的用户

我查看了this older thread,但它似乎是以前版本的 Firebase

是否可以在当前的 Firebase 中执行此操作,或者我的替代方法是保持此信息可用(并向所有人开放?)以查明给定电子邮件是否是我系统的一部分?

【问题讨论】:

  • Firebase 身份验证中没有内置 API 可以通过电子邮件地址查找用户。开发人员采用的常用方法是通过在 Firebase 数据库中建模他们需要的信息来解决这个问题,就像在您链接的线程中一样。
  • 谢谢!如果我维护一个用户电子邮件地址节点以简单地获得布尔值 True 或 False 存在,我如何保护它不被任何人(公共/世界)读取?
  • 您无法阻止查找单个电子邮件地址,因为这正是您要实施的用例。但是您可以使列表不可读,并且只有每个单独的电子邮件地址可读,以最大程度地减少曝光。
  • @FrankvanPuffelen fetchSignInMethodsForEmail 方法不能在这里工作吗?如果有,如何使用它?

标签: firebase firebase-authentication


【解决方案1】:

我使用 fetchProvidersForEmail(email) 如果结果返回为空数组,则此电子邮件尚未用于注册。

firebase.auth().fetchProvidersForEmail(email)
.then(providers => {
  if (providers.length === 0) {
    // this email hasn't signed up yet
  } else {
    // has signed up
  }
});

【讨论】:

  • 请注意,该方法现在称为 fetchSignInMethodsForEmail
【解决方案2】:

使用电子邮件密码创建用户的新方法返回一个值,无论给定的电子邮件地址是否已被使用。见here

【讨论】:

  • 是的,这正是我所需要的!谢谢!
【解决方案3】:

您可以通过电子邮件查找用户信息:

firebase.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(error) {
   console.log('Error fetching user data:', error);
  });

我想让事情更清楚一点,这个方法不存在 - 可以在 firebase 客户端库中寻找它,它一开始就没有可用,而且它不是一个好方法无论如何都有想法。此方法是 admin SDK 的一部分,因此为了调用该方法,您需要在服务器上运行它,并从客户端调用它。 OP 没有将问题限制在 firebase 客户端库,所以我的回答仍然正确。

Retrieve user data

【讨论】:

【解决方案4】:

至于今天 2021 年 11 月 18 日,Firebase SDK 没有提供通过电子邮件获取用户的方法。

【讨论】:

  • 这些答案中的方法仍然适用,但是从 v9 开始,您访问它的方式发生了变化:fetchSignInMethodsForEmail
  • 此 API 告诉我们用户可以使用哪些提供商登录...而不是用户帐户信息,例如,他的个人资料 URL。
【解决方案5】:
猜你喜欢
  • 2023-03-18
  • 2019-05-01
  • 2022-08-07
  • 2018-02-10
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 2021-03-26
相关资源
最近更新 更多