Firebase身份验证用户创建时没有电子邮件地址-来自IOS的Google

Firebase身份验证用户创建时没有电子邮件地址-来自IOS的Google,ios,firebase,firebase-authentication,google-cloud-functions,Ios,Firebase,Firebase Authentication,Google Cloud Functions,我已设置firebase身份验证,正在尝试发送欢迎电子邮件 我不明白的是,为什么经过身份验证的用户没有电子邮件字段,而在提供商数据中只有此字段所有样本使用类似于: exports.sendWelcomeEmail = functions.auth.user().onCreate(event => { const user = event.data; // The Firebase user. const email = user.email; // The email of the

我已设置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
  • 我正在通过GIDSignInButton使用来自IOS的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时发现的代码和示例都是相同的

我目前已经启用了google和facebook作为“登录方法”

也许如果我也启用了电子邮件/密码,我就可以访问了

我可以确认,在我的IOS应用程序中,用户登录后也没有电子邮件

用户首次注册您的应用程序时,将使用可用信息填充用户的配置文件数据: 如果用户使用电子邮件地址和密码注册,则只填充主电子邮件地址属性


如果用户与联合身份提供商(如Google或Facebook)注册,提供商提供的帐户信息将用于填充Firebase用户的个人资料。这是我的问题的一个解决方法,不是真正的答案:

我从我找到的第一个提供商那里提取一封电子邮件,在我的情况下,它总是 谷歌

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;
});`