firebase - 如何根据用户ID获取Firebase中任何用户的电子邮件?

标签 firebase

我需要获取一个用户对象,特别是用户电子邮件,我将拥有以下格式的用户 ID:

简单登录:6

所以我需要编写一个像这样的函数:

getUserEmail('simplelogin:6')

这可能吗?

最佳答案

可以使用 Admin SDK 实现

Admin SDK 无法在客户端上使用,只能在 Firebase Cloud Functions 中使用,然后您可以从客户端调用该功能。您将获得以下 promise :(这真的很容易 set a cloud function up 。)

admin.auth().getUser(uid)
admin.auth().getUserByEmail(email)
admin.auth().getUserByPhoneNumber(phoneNumber)

参见此处https://firebase.google.com/docs/auth/admin/manage-users#retrieve_user_data

<小时/>

简而言之,这就是您正在寻找的

admin.auth().getUser(data.uid)
  .then(userRecord => resolve(userRecord.toJSON().email))
  .catch(error => reject({status: 'error', code: 500, error}))

完整片段

在下面的代码中,我首先通过检查调用此函数的用户的 uid 是否位于节点 userRights/admin 下来验证他是否有权显示有关任何人的此类敏感信息。

export const getUser = functions.https.onCall((data, context) => {
  if (!context.auth) return {status: 'error', code: 401, message: 'Not signed in'}

  return new Promise((resolve, reject) => {
    // verify user's rights
    admin.database().ref('userRights/admin').child(context.auth.uid).once('value', snapshot => {
      if (snapshot.val() === true) {
        // query user data
        admin.auth().getUser(data.uid)
          .then(userRecord => {
            resolve(userRecord.toJSON()) // WARNING! Filter the json first, it contains password hash!
          })
          .catch(error => {
            console.error('Error fetching user data:', error)
            reject({status: 'error', code: 500, error})
          })
      } else {
        reject({status: 'error', code: 403, message: 'Forbidden'})
      }
    })
  })
})

顺便说一句,请了解 onCall()onRequest() 之间的区别 here .

关于firebase - 如何根据用户ID获取Firebase中任何用户的电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889729/

相关文章:

ios - 点击保存按钮时获取表格 View 单元格中的文本字段并存储在字典中?

javascript - Firebase - 如何将 orderBy 添加到复合查询?

iOS 从用户文档 Firebase Firestore 存储/更新和检索位置数据

java - 在 Firebase 数据库中编写规则

angular - 使用社交登录将 Firebase 用户添加到用户数据库?

Android Firebase 远程配置初始提取不返回值

android - 如何在 Firebase 中执行连接查询?

ios - 试图将图像上传到 firebase 存储但没有被执行?

javascript - 请通过使用 Firebase 使用 Google 更新我的 gradle 来修复版本冲突

ios - 不显示所有用户的用户数据,如何只显示喜欢该登录用户的人的数据?