【问题标题】:Firebase Get User UID by EmailFirebase 通过电子邮件获取用户 UID
【发布时间】:2018-11-28 10:09:18
【问题描述】:

我正在为我的 firebase 应用程序构建一个管理面板,并且希望能够更轻松地管理用户。我希望能够通过电子邮件查找用户,然后在必要时将其删除。我知道 fetchSignInMethods 将返回一个值,如果用户已注册以及他们注册了哪个提供商,但无论如何查询身份验证树(而不是数据库树)以通过电子邮件搜索用户?如果能够从身份验证节点获取电子邮件关联的 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 的用户,调用成本很高并且需要一段时间才能返回,并且在身份验证调用的情况下也无济于事注册用户成功,但将其详细信息存储到数据库节点不成功。

【问题讨论】:

    标签: swift firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

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

    但 Firebase Admin SDK 中确实存在该操作。来自documentation on getting user data

    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 分开所带来的安全优势。

    【讨论】:

      猜你喜欢
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多