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