我已设置了firebase身份验证,并尝试发送欢迎电子邮件
我不明白为什么经过身份验证的用户没有电子邮件字段,并且只在提供商数据中包含此字段。 所有样本使用类似于:
的内容exports.sendWelcomeEmail = functions.auth.user().onCreate(event => {
const user = event.data; // The Firebase user.
const email = user.email; // The email of the user.
const displayName = user.displayName; // The display name of the user.
console.log("New User created: " + JSON.stringify(user));
console.log('email:', email);
但是,我认证的用户似乎没有收到电子邮件 我的日志显示
email: undefined
我的控制台日志包含以下内容
{
"displayName": "Ryan H",
"metadata": {
"createdAt": "2017-06-19T10:06:21.000Z",
"lastSignedInAt": "2017-06-19T10:06:21.000Z"
},
"photoURL": "https://lh6.googleusercontent.com/-MXne-lIR8e8/AAAAAAAAAAI/AAAAAAAAbeQ/Z1OvxasY/s96-c/photo.jpg",
"providerData": [
{
"displayName": "Ryan H",
"email": "ryanh@gmail.com",
"photoURL": "https://lh6.googleusercontent.com/-MXne-lIR8e8/AAAAAAAAAAI/AAAAAAAAbeQ/Z1asY/s96-c/photo.jpg",
"providerId": "google.com",
"uid": "1077081708"
}
],
"uid": "WjdlLc3QNvrmkj0yOuqo2"
}
正如您所看到的,除提供商数据外没有其他电子邮件。
模型有变化吗? 我应该总是尝试从提供商数据中获取我的电子邮件地址吗? 为什么我使用 user.email 找到所有相同的代码和示例?
我目前已启用google和facebook作为“登录方式”。
也许如果我也启用了电子邮件/密码,我也可以访问。
我可以在我的IOS应用中确认登录后用户也没有电子邮件。
根据https://firebase.google.com/docs/auth/users
用户首次注册您的应用时,会使用以下可用信息填充用户的个人资料数据: 如果用户使用电子邮件地址和密码注册,则仅填充主电子邮件地址属性
如果用户使用联合身份提供商(例如Google或Facebook)注册,则提供商提供的 帐户信息将用于填充Firebase用户的个人资料
答案 0 :(得分:1)
这是我的问题的解决方法,而不是真正的答案:
我从我找到的第一个提供商处提取电子邮件,在我的情况下总是如此 谷歌
exports.sendWelcomeEmail = functions.auth.user().onCreate(event => {
const user = event.data; // The Firebase user.
var email = user.email; // The email of the user.
if (email == undefined) {
for (var provider of user.providerData) {
if (provider.email) {
email = provider.email;
break;
}
}
}
const displayName = user.displayName; // The display name of the user.
// [END eventAttributes]
console.log("New User created: " + JSON.stringify(user));
console.log('email:', email);
console.log('displayName:', displayName);
sendWelcomeEmail(email,displayName)
return;
});`