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

如何根据用户id获取Firebase中任何用户的电子邮件?,firebase,Firebase,我需要获取一个用户对象,特别是用户电子邮件,我将使用以下格式的用户id: simplelogin:6 所以我需要写一个类似这样的函数: getUserEmail('simplelogin:6') 可能吗?要获取当前登录用户的电子邮件地址,请使用该功能。对于电子邮件和密码/simplelogin,您应该能够获得如下电子邮件: ref = new Firebase('https://YourFirebase.firebaseio.com'); email = ref.getAuth().passwo

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

simplelogin:6

所以我需要写一个类似这样的函数:

getUserEmail('simplelogin:6')


可能吗?

要获取当前登录用户的电子邮件地址,请使用该功能。对于电子邮件和密码/simplelogin,您应该能够获得如下电子邮件:

ref = new Firebase('https://YourFirebase.firebaseio.com');
email = ref.getAuth().password.email;
在我看来,
password
对象的名称不太合适,因为它包含
email
字段


我相信通过uid获取任何用户的电子邮件地址不是Firebase的功能。当然,这将向所有用户公开所有用户的电子邮件。如果您确实希望这样做,则需要在创建帐户时通过用户的uid将每个用户的电子邮件保存到数据库中。然后,其他用户将能够通过uid从数据库检索电子邮件。

简单获取firebaseauth实例。 我在firebase中创建了一个默认电子邮件和密码。这只是为了安全起见,除了谁知道或谁购买了我们的产品来使用我们的应用程序之外,没有人可以使用我们的应用程序。 下一步,我们将为用户帐户创建提供单一屏幕

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    String email = user.getEmail();
每次用户打开应用程序时,如果当前用户不等于我们的默认电子邮件,用户将重定向到仪表板。 下面是代码

mAuth = FirebaseAuth.getInstance();
    if (mAuth.getCurrentUser() != null){
        String EMAIL= mAuth.getCurrentUser().getEmail();
            if (!EMAIL.equals("example@gmail.com")){
                startActivity(new Intent(LoginActivity.this,MainActivity.class));
                finish();
            }
    }
我也在寻找同样的解决方案,终于找到了。

这是可能的管理SDK Admin SDK不能在客户端上使用,只能在Firebase云函数中使用,然后您可以从客户端调用这些函数。你将得到这些承诺:(这真的很容易做到。)

admin.auth().getUser(uid)
admin.auth().getUserByEmail(电子邮件)
admin.auth().getUserByPhoneNumber(phoneNumber)
看这里


简而言之,这就是你要找的

admin.auth().getUser(data.uid)
.then(userRecord=>resolve(userRecord.toJSON().email))
.catch(error=>reject({状态:'error',代码:500,error}))
完整片段 在下面的代码中,我首先验证调用此函数的用户是否有权通过检查其uid是否位于节点
userRights/admin
下来显示有关任何人的此类敏感信息

export const getUser=functions.https.onCall((数据,上下文)=>{
如果(!context.auth)返回{状态:“错误”,代码:401,消息:“未登录”}
返回新承诺((解决、拒绝)=>{
//验证用户的权限
admin.database().ref('userRights/admin').child(context.auth.uid).once('value',snapshot=>{
if(snapshot.val()==真){
//查询用户数据
admin.auth().getUser(data.uid)
。然后(userRecord=>{
resolve(userRecord.toJSON())//警告!首先过滤json,它包含密码哈希!
})
.catch(错误=>{
console.error('获取用户数据时出错:',错误)
拒绝({状态:“错误”,代码:500,错误})
})
}否则{
拒绝({状态:'错误',代码:403,消息:'禁止'})
}
})
})
})

顺便说一句,根据Firebase framework的最新更新,了解
onCall()
onRequest()
之间的区别:

firebase.auth().currentUser && firebase.auth().currentUser.email
见:

每个提供商都没有定义的电子邮件地址,但如果用户通过电子邮件进行身份验证。然后这将是实现上述解决方案的一种可能方式。

当前解决方案(Xcode 11.0)


我也有同样的问题。需要将Firestore中的
电子邮件
替换为
uid
,以避免电子邮件到处都是可以使用服务帐户从计算机上的脚本调用它。您不需要Firebase函数来执行此操作

首先生成服务帐户并下载其json密钥
Firebase控制台>齿轮图标>项目设置>服务帐户>生成新私钥按钮

然后创建项目,添加密钥并调用AdminSDK

  • npm init
  • npm安装dotenv firebase admin
  • 将json密钥文件从上面放入
    .keys
    目录,保持项目目录中没有密钥文件。同时
    .gitignore
    目录
  • 将json密钥文件的路径写入
    .env
    文件,如下所示:
    GOOGLE\u APPLICATION\u CREDENTIALS=“.keys/MYPROJECT-firebase-adminsdk-asdf-234lkjfsoi.json”
    。我们将使用
    dotenv
    稍后加载它
  • 将以下代码写入
    index.js
  • const admin=require('firebase-admin');
    admin.initializeApp({
    凭据:admin.credential.applicationDefault(),
    });
    (异步()=>{
    常量电子邮件=”admin@example.com";
    const auth=admin.auth();
    const user=wait auth.getUserByEmail(电子邮件);
    //或者按要求使用uid
    //const user=wait auth.getUser(uid);
    日志(user.uid,user.email);
    //const firestore=admin.firestore();
    //这里有龙。。。
    })();
    
  • 运行如下
    node-r dotenv/config index.js

  • 请参阅

    这是当前登录用户的电子邮件。不是你需要的任何用户的电子邮件。抱歉,我误解了。请查看我修改后的答案。对您修改后的答案的评论:由于明显的原因,目前firebase数据库不允许在数据库中编写电子邮件。这是一个旧答案,但不是一个好答案。你自己解决过吗?电话号码是否与此类似(此问题提出后新增的功能)这将如何通过给定id发送任何用户的电子邮件?因为此问题已从“当前用户”重命名为“任何用户”。这是两个截然不同的问题,因为您只能从AdminSDK(也就是说,从后端)获取任何用户的电子邮件。但是,你可以从他们的会话中获取当前用户的电子邮件。最初的标题是如何根据用户ID在FialBASE中获取任何用户对象。然而,即使有任何PAR。
    Auth.auth().currentUser? ?? "Mail"
    Auth.auth().currentUser?.email ?? "User"