gpt4 book ai didi

java - Google 登录会删除现有的用户数据

转载 作者:行者123 更新时间:2023-12-04 10:00:46 24 4
gpt4 key购买 nike

我正在使用 Firebase 身份验证和 Cloud Firestore 构建一个 Android 应用程序。该应用程序有多个 Auth 提供程序;用户可以使用其注册的电子邮件和密码或使用 Google 或 Facebook 登录。

所以问题来了:
当用户第一次使用他自己注册的电子邮件和密码登录时,他会将他的详细信息存储在 Firestore 的文档中。现在,如果同一用户注销并使用 Google 登录(链接到相同的电子邮件地址),则登录成功,但 Firestore 文档不见了;被 Google Sign In 提供的数据覆盖/替换。甚至注册的 Firebase EmailAuth 详细信息也不见了;全部被 Google 登录客户端覆盖。

我注意到的一件事是,当我上面提到的事情发生时,电子邮件身份验证和 Google 登录身份验证(具有相同的电子邮件地址)在我的控制台的 Firebase 身份验证页面中具有相同的用户 UID。

我要的是:
用户使用他注册的电子邮件和密码登录,然后注销。当他通过谷歌登录时,如果已经注册了相同的电子邮件地址,则需要有一个错误提示阻止他通过谷歌登录。
基本上,如果他的电子邮件地址已经注册,那么他只能通过电子邮件和密码验证而不是通过谷歌登录。

Facebook 在这种情况下提供帮助;如果注册了相同的电子邮件地址,它不会登录,而是会给出类似于“此电子邮件地址已存在于另一个帐户”的错误。我想在谷歌这里做同样的事情。

如果我的问题不是很清楚,试试这个:https://github.com/firebase/firebase-android-sdk/issues/25

(是的,我注意到他们用“预期行为”结束了这个问题,这就是我发布这个问题的原因;我需要一个解决这种行为的方法来让它做我需要的事情)。

最佳答案

What I want is The user logs in with his registered email and password and then logs out. When he goes in for login via Google, there needs to be an error toast preventing him from signing in via Google if the same email address has been registered already. Basically, if his email address has been registered, then he can log in only via email and password authentication and not via Google.



解决这个问题的流程是从一开始就向用户询问电子邮件地址。获得电子邮件地址后,您可以检查用户是否已经拥有帐户。假设每个身份验证提供程序都有不同的按钮,您可以根据用户第一次选择的身份验证显示或隐藏它们。例如,如果用户选择了使用电子邮件和密码进行身份验证,请使用以下方法检查:
auth.fetchSignInMethodsForEmail(email).addOnCompleteListener(signInMethodsTask -> {
if (signInMethodsTask.isSuccessful()) {
List<String> signInMethods = signInMethodsTask.getResult().getSignInMethods();
for (String signInMethod : signInMethods) {
switch (signInMethod) {
case GoogleAuthProvider.PROVIDER_ID:
googleSignInButton.setVisibility(VISIBLE);
facebookSignInButton.setVisibility(GONE);
passwordSignInButton.setVisibility(GONE);
break;
case FacebookAuthProvider.PROVIDER_ID:
googleSignInButton.setVisibility(GONE);
facebookSignInButton.setVisibility(VISIBLE);
passwordSignInButton.setVisibility(GONE);
break;
case EmailAuthProvider.PROVIDER_ID:
googleSignInButton.setVisibility(GONE);
facebookSignInButton.setVisibility(GONE);
passwordSignInButton.setVisibility(VISIBLE);
break;
default:
googleSignInButton.setVisibility(VISIBLE);
facebookSignInButton.setVisibility(VISIBLE);
passwordSignInButton.setVisibility(VISIBLE);
break;
}
}
}
});

EmailAuthProvider.PROVIDER_ID的情况下,隐藏其他按钮并仅显示提供电子邮件和密码登录的按钮。如果用户是新用户,则显示所有按钮,以便用户可以选择一个或其他身份验证选项。

附言如果您只想让用户使用特定提供商登录,则无需让用户选择使用其他提供商登录。

关于java - Google 登录会删除现有的用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61833249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com