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

时间:2017-06-19 10:29:42

标签: 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 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

我的控制台日志包含以下内容

{
    "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用户的个人资料

1 个答案:

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