首页 文章

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

提问于
浏览
0

我已经设置了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 回答

  • 1

    这是我的问题的解决方法,而不是一个真正的答案:

    我从我找到的第一个提供商处提取了一封电子邮件,在我的情况下,该邮件始终是Google

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

相关问题