当前位置: 首页 > 面试题库 >

Firebase通过电子邮件获取用户UID

萧和同
2023-03-14
问题内容

我正在为我的Firebase应用程序构建一个管理面板,希望可以更轻松地管理用户。我希望能够通过电子邮件查找用户,然后在必要时将其删除。我了解,如果注册了用户以及他们向其注册了哪个提供程序,则fetchSignInMethods将返回一个值,但是仍然可以查询Authentication树(而非数据库树)以通过电子邮件搜索用户吗?能够从Authentication节点获取与电子邮件相关联的UID会很好。

目前,我的应用程序仅使用电子邮件/密码身份验证(没有Facebook,Twitter等),这就是我检查用户是否已注册的方式:

private func showIfUserIsRegistered(with email: String) {
    Auth.auth().fetchSignInMethods(forEmail: email) { (providers, error) in
        if error != nil {
            KVNProgress.showError(withStatus: error.debugDescription)
            return
        }
        let doesntExist = "No, this user doesn't exist."
        let exists = "Yes, user exists and is registered."
        let passwordProvider = "password"
        guard let sources = providers else {
            KVNProgress.showError(withStatus: doesntExist)
            return
        }
        let registered = sources.first == passwordProvider ? exists : doesntExist
        KVNProgress.showSuccess(withStatus: registered)
    }
}

我确实将用户的信息保存在数据库节点中,但是我可以查询一下,但是对于超过75k的用户而言,该调用的成本很高并且需要花费一些时间才能返回,并且在进行身份验证调用以注册用户的情况下无济于事用户成功,但是将其详细信息存储到“数据库”节点失败。


问题答案:

客户端SDK中没有API可以通过其电子邮件地址查找UID。长期以来,通过数据库执行此操作一直是惯用的方法

但是,该操作确实存在于Firebase Admin
SDK中。从获取用户数据的文档中:

admin.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);
  });

该代码在Node.js的JavaScript中,但是Admin SDK也支持Java,Go和Python中的此操作。

Firebase Admin SDK可以在受信任的环境中运行,例如您控制的服务器或Cloud
Functions。它们以管理特权运行,并允许完全访问项目中的资源。因此,它们执行客户端SDK中无法(安全地)执行的某些操作。

因此,如果您不想从数据库中列出用户,通常的方法是使用Admin
SDK构建后端(可能非常简单),然后从您的应用中调用该后端。确保正确保护后端,否则您将失去将Admin SDK与客户端SDK分开所带来的安全优势。



 类似资料:
  • 问题内容: 我正在构建一个 Android 应用程序,在该应用程序中我使用不同的方式让用户注册自己,例如电子邮件/密码,电话,谷歌,Facebook,Twitter。我还希望用户能够将彼此添加为联系人。 如果仅使用电子邮件和Google,那么实施起来会很容易,因为我可以将用户的电子邮件存储在数据库中,并使用它来识别不同的用户并在他们之间建立关系。 但是现在的问题是,用户也可以使用他们的电话号码进行

  • 我在我的系统中使用谷歌广告API PHP库。但是我没有在这里提供的API列表中找到以下2个APIhttps://developers.google.com/google-ads/api/docs/account-management/create-account: API,以查明用户是否已经存在使用电子邮件的谷歌广告帐户?如果找到,则返回其10位数的客户ID。 我在几个网站上见过同样的过程。每当用

  • 问题内容: 我的Android应用程序中有一个Facebook登录选项,但尝试获取用户的电子邮件失败。在用户登录并添加到Parse.com用户表(具有有效的访问令牌)之后,我请求Facebook用户信息,但仅获取其ID和名称(即使电子邮件已设置为权限之一) )。 这是我的代码(在我的按钮的OnClickListener内部): 问题答案: 我想这与Graph API v2.4中的更改有关,该更改使

  • 问题内容: 我正在使用Graph API,但无法弄清楚如何获取登录用户的电子邮件地址。 Graph简介指出:“ Graph API可以提供您通常会以注册表格形式请求的所有基本帐户注册数据的访问权限,包括名称,电子邮件地址,个人资料图片和生日” 很好,但是如何访问该信息? 这是我到目前为止的内容: 问题答案: 获取用户电子邮件地址的唯一方法是在电子邮件字段上请求扩展权限。用户必须允许您看到此内容,并

  • 我一直试图获取电子邮件正文与imap_fetchbody($stream,$msgno,$选项),但没有成功。 然后我尝试使用imap_fetchstructure($stream,$msgno),并使用各自的子类型手动解码每种类型,如:- 对于前两个,我可以用这样的东西来解码 但说到混合,我要么不知道,要么我该怎么办,要么我在哪里犯错。

  • 在上一章中,我们学习了如何查看电子邮件。 现在让我们看看如何获​​取每封电子邮件并阅读其内容。 让我们编写一个Java类FetchingEmail ,它将读取以下类型的电子邮件: 简单邮件 电子邮件附件 使用内联图片发送电子邮件 代码中遵循的基本步骤如下: 获取Session对象。 创建POP3商店对象并连接到商店。 创建文件夹对象并在邮箱中打开相应的文件夹。 检索邮件。 分别关闭文件夹和存储对象