我已经设置了firebase身份验证,并尝试发送欢迎电子邮件
我不明白的是,为什么经过身份验证的用户没有电子邮件字段,只有提供者数据中有此字段 . All the samples 使用类似的东西:
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
- 我正在使用来自IOS的带有GIDSignInButton的 google 身份验证
我的控制台日志具有以下内容
{
"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 找到的所有相同代码和示例?
我目前已启用谷歌和Facebook作为“登录方法” .
也许如果我也启用了电子邮件/密码,我可以访问 .
我可以确认,在我的IOS应用程序中,用户登录后也没有电子邮件 .
根据https://firebase.google.com/docs/auth/users
用户首次注册您的应用时,将使用可用信息填充用户的 Profiles 数据:如果用户使用电子邮件地址和密码注册,则仅填充主电子邮件地址属性
如果用户使用联合身份提供商(例如Google或Facebook)注册,则会生成帐户信息 available by the provider is used to populate the Firebase User's profile
1 回答
这是我的问题的解决方法,而不是一个真正的答案:
我从我找到的第一个提供商处提取了一封电子邮件,在我的情况下,该邮件始终是Google