从 Firebase 身份验证控制台获取标识符字段
Get Identifier field from Firebase Auth Console
我正在尝试从当前使用 Facebook Firebase 提供商进行身份验证的用户处获取电子邮件。该电子邮件列在项目的 Firebase 身份验证控制台内的 Identifier 字段下:
然而,当我调用 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']
经过一些测试和调试后,我发现如果您使用常规的 Firebase Email/Password 登录方法,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);
}
}
在我的例子中,getEmail() 方法始终 returns 三种登录可能性的数据(如果用户授权我的应用程序使用 show/use 电子邮件):使用电子邮件登录、登录使用 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());
}
我正在尝试从当前使用 Facebook Firebase 提供商进行身份验证的用户处获取电子邮件。该电子邮件列在项目的 Firebase 身份验证控制台内的 Identifier 字段下:
然而,当我调用 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']
经过一些测试和调试后,我发现如果您使用常规的 Firebase Email/Password 登录方法,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);
}
}
在我的例子中,getEmail() 方法始终 returns 三种登录可能性的数据(如果用户授权我的应用程序使用 show/use 电子邮件):使用电子邮件登录、登录使用 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());
}