Firebase 覆盖使用 Google 帐户登录

问题描述 投票:0回答:2

文档中似乎没有提到这一点,我找到的只是thisthis,我想在其中确认这一点:

如果现有帐户具有相同的电子邮件地址,但 使用其他凭据(例如密码或不受信任的 提供商),出于安全原因,之前的凭据将被删除。

如果用户通过 Facebook 或电子邮件/密码登录,然后通过 Google 登录,则其帐户登录方法将转换为 Google。只有 Google 才会出现这种情况,并且只有一个帐户的设置处于活动状态。

事情本来就是这样吗?有什么方法可以阻止吗?

android facebook firebase firebase-authentication google-signin
2个回答
21
投票

正如文档所述:某些电子邮件域有值得信赖的提供商。最突出的是:Google 是 @gmail.com 地址的值得信赖的提供商,因为它是这些电子邮件地址的唯一颁发者。

如果用户首先在 Facebook 上注册其 Gmail 地址,然后又从 Google 提供商处使用同一 Gmail 地址进行注册,则后一个注册将被视为推翻前一个注册。如果用户稍后再次使用 Facebook 登录,则两个帐户可以链接。

据我所知,防止这种情况的唯一方法是允许每个电子邮件地址有多个帐户。

另请参阅一些 Firebase 身份验证工程师的帖子:


0
投票

为了解决这个问题,我使用了阻塞功能。如果用户之前使用电子邮件/密码注册但未经验证,我会阻止他们使用 Google 登录,并在客户端上向他们显示错误。

  export const beforesignin = beforeUserSignedIn(async (event) => {
      const user = event.data
    
    
      if (user.email && event.eventType.includes(':google.com')) {
        let existingUser
    
        try {
          existingUser = await admin.auth().getUserByEmail(user.email)
        } catch (error) {
          logger.error('Error fetching user by email:', error)
        }
    
        if (existingUser && !existingUser.emailVerified) {
          logger.info(
            `User with email ${user.email} has an existing unverified account: `,
            existingUser
          )
    
          // check if email is unverified
          throw new HttpsError(
            'failed-precondition',
            'Unverified email in existing account'
          )
        }
    
        // otherwise, allow the sign in
      }

})
© www.soinside.com 2019 - 2024. All rights reserved.