我尝试使用Facebook Firebase提供商从当前已验证的用户那里收到电子邮件。该电子邮件列在Project的Firebase身份验证控制台中的标识符字段下:
但是,当我调用firebase.auth().currentUser
加载用户信息时,电子邮件字段为null
。有关如何从Firebase获取标识符(我在哪里看到电子邮件地址)的任何想法?这甚至可能吗?
以下是我使用的代码:
componentDidMount() {
let user = firebase.auth().currentUser;
let name, email, photoUrl, uid, emailVerified;
if (user !== null) {
name = user.displayName;
email = user.email;
photoUrl = user.photoURL;
emailVerified = user.emailVerified;
uid = user.uid;
console.log(name, email, photoUrl, emailVerified, uid);
}
}
注意:在Firebase中禁止使用相同的电子邮件地址创建多个帐户。此外,Facebook API权限设置为['public_profile', 'email']
答案 0 :(得分:0)
经过一些测试和调试后,我发现如果您使用的是常规Firebase电子邮件/密码登录方法,则会填充email
字段。但是,如果您使用其他登录提供商方法(如Facebook),则电子邮件字段将显示为null
(不确定原因)。
对user
对象的进一步检查显示providerData
属性。
它是一个包含所有提供者信息(包括电子邮件地址)的数组:
所以,我更新了我的代码以适应这个:
componentDidMount() {
let user = firebase.auth().currentUser;
let name, email, photoUrl, uid, emailVerified;
if (user) {
name = user.displayName;
email = user.email;
photoUrl = user.photoURL;
emailVerified = user.emailVerified;
uid = user.uid;
if (!email) {
email = user.providerData[0].email;
}
console.log(name, email, photoUrl, emailVerified, uid);
}
}
答案 1 :(得分:0)
在我的情况下,getEmail()方法始终返回三种登录可能性的数据(如果用户授权我的应用程序显示/使用电子邮件):使用电子邮件登录,使用Google登录,使用Facebook登录
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Log.v(TAG,"user.getEmail():"+user.getEmail());
if (user.getEmail() == null){
// User did not authorize the app to show/user email
}
else {
Log.v(TAG,"user.getEmail():"+user.getEmail());
}