Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正确处理“已存在”的电子邮件地址的方法;谷歌登录“;在火基_Ios_Swift_Firebase_Authentication_Firebase Authentication - Fatal编程技术网

Ios 正确处理“已存在”的电子邮件地址的方法;谷歌登录“;在火基

Ios 正确处理“已存在”的电子邮件地址的方法;谷歌登录“;在火基,ios,swift,firebase,authentication,firebase-authentication,Ios,Swift,Firebase,Authentication,Firebase Authentication,在我的应用程序中,用户也可以通过“电子邮件和密码”和“谷歌”注册。对于电子邮件,在注册之前,我从Auth获得电子邮件列表并通知用户它是否已被使用 但对于谷歌登录,我只能在 func-sign(sign:GIDSignIn!、didsignin-user:GIDGoogleUser!、withError-error:error?) 他被解雇了。因此,想象一下,如果一个用户通过电子邮件地址注册,然后尝试使用相同的电子邮件地址通过谷歌身份验证“登录”或“注册”,那么它只需在Auth中用谷歌电子邮件替换

在我的应用程序中,用户也可以通过“电子邮件和密码”和“谷歌”注册。对于电子邮件,在注册之前,我从Auth获得电子邮件列表并通知用户它是否已被使用

但对于谷歌登录,我只能在

func-sign(sign:GIDSignIn!、didsignin-user:GIDGoogleUser!、withError-error:error?)


他被解雇了。因此,想象一下,如果一个用户通过电子邮件地址注册,然后尝试使用相同的电子邮件地址通过谷歌身份验证“登录”或“注册”,那么它只需在Auth中用谷歌电子邮件替换现有的电子邮件列表。所以我的问题是,当用户尝试谷歌身份验证时,
didsignin
被触发之前,有没有任何方法可以获取电子邮件?或者我应该如何处理这种情况?

如果我理解正确,您想知道在Firebase身份验证中是否正在使用电子邮件地址,而无需调用
登录方法

如果这是正确的,您可以通过调用

逻辑是,您将:

  • 请用户输入他们的电子邮件地址
  • Call
    fetchSignInMethodForEmail
  • 如果有该电子邮件地址的帐户,请允许他们从以前登录的提供商中进行选择
  • 如果没有该电子邮件地址的帐户,请允许他们向您支持的任何提供商注册

  • 非常感谢你的评论。我真的在等你来评论,因为你的解决方案是满栈溢出,这是最好的Firebase关联。是的,你说得对。是的,我做的正是为了电子邮件认证。调用
    “fetchSigningMethodForEmail”
    检查是否存在。但问题是,当用户进行谷歌身份验证时,我无法事先获得与用户的谷歌帐户相关联的电子邮件。那么,在这种情况下,我将向
    “FetchSigningMethodsForemail”
    发送哪封电子邮件呢?我检查了一下,说我通过了“身份验证”xyz@gmail.com“先发电子邮件,然后再尝试通过Google验证,我的Google id相同()xyz@gmail.com),它只是从Auth列表中替换我以前的记录,并将其替换为新的Google状态。后来我尝试用我以前设置的密码再次登录,但上面说没有密码与此电子邮件关联,这意味着Firebase只是用google身份验证状态替换我以前的状态。第二条评论是完全不同的问题。已知某些身份提供者是某些电子邮件域的受信任提供者。例如:谷歌是gmail.com账户的可信提供商。因此,一旦你使用谷歌提供商的gmail.com帐户登录,它将基本上取代以前的帐户。如果不需要它们,请再次使用
    fetchSigningMethodsForemail
    确定是否有其他提供商,然后链接帐户。这样就可以了。但是,我如何处理第一条评论呢(我不知道。我想用户必须输入他们的电子邮件地址,除非操作系统允许你以某种方式查找有效的电子邮件地址(我认为Android是这样的)。