当前位置: 首页 > 知识库问答 >
问题:

如何检查用户是否已经通过gmail或google帐户登录?

双恩
2023-03-14
                if(!em.isEmpty() || !pass.isEmpty()) {
                    mfirebaseAuth.signInWithEmailAndPassword(em, pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                    Toast.makeText(getApplicationContext(), "Logged in successfully", Toast.LENGTH_SHORT).show();


                            } else {
                                String errorCode = ((FirebaseAuthException) task.getException()).getErrorCode();

                                switch (errorCode) {

                                    case "ERROR_INVALID_EMAIL":
                                        Toast.makeText(MainLoginActivity.this, "The email address is badly formatted.", Toast.LENGTH_LONG).show();
                                        email.setError("The email address is badly formatted.");
                                        email.requestFocus();
                                        break;


                                    case "ERROR_USER_MISMATCH":
                                        Toast.makeText(MainLoginActivity.this, "The supplied credentials do not correspond to the previously signed in user.", Toast.LENGTH_LONG).show();
                                        break;

                                    case "ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL":
                                        Toast.makeText(MainLoginActivity.this, "An account already exists with the same email address but different sign-in credentials. Sign in using associated email address.", Toast.LENGTH_LONG).show();
                                        break;

                                    case "ERROR_EMAIL_ALREADY_IN_USE":
                                        Toast.makeText(MainLoginActivity.this, "The email address is already in use by another account.", Toast.LENGTH_LONG).show();
                                        email.requestFocus();
                                        break;

                                    case "ERROR_CREDENTIAL_ALREADY_IN_USE":
                                        Toast.makeText(MainLoginActivity.this, "This credential is already associated with a different user account.", Toast.LENGTH_LONG).show();
                                        break;

                                    case "ERROR_USER_DISABLED":
                                        Toast.makeText(MainLoginActivity.this, "The user account has been disabled by an administrator.", Toast.LENGTH_LONG).show();
                                        break;

                                    case "ERROR_INVALID_USER_TOKEN":
                                        Toast.makeText(MainLoginActivity.this, "The user\\'s credential is no longer valid. The user must sign in again.", Toast.LENGTH_LONG).show();
                                        break;

                                    case "ERROR_WRONG_PASSWORD":
                                        Toast.makeText(MainLoginActivity.this, "The password is invalid or the user does not have a password.", Toast.LENGTH_LONG).show();
                                        password.setError("password is incorrect ");
                                        password.requestFocus();
                                        password.setText("");
                                        break;

                                    default:
                                        Toast.makeText(getApplicationContext(), "Error! " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();


                                }
                            }
                        }
                    });
                }

我面临的问题是:

用户首先使用“使用电子邮件注册”进行注册。之后,用户注册了一个谷歌帐户(有相同的电子邮件)。

现在之后,当用户尝试通过电子邮件和密码登录。我得到错误的密码是不正确的,我知道这是因为注册与电子邮件详细信息已经覆盖了谷歌帐户详细信息。

我要显示错误“电子邮件与谷歌帐户链接,请通过谷歌帐户登录”。

共有1个答案

安博文
2023-03-14

您应该使用authCredentialisNewUser这里是示例

 private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
        Log.d("TAG", "signInWithCredential:success" + acct.getId());

        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
        mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            boolean isNewUser = task.getResult().getAdditionalUserInfo().isNewUser();
            if (isNewUser) {

                Log.d(TAG, "Is New User!");
                FirebaseUser user = mAuth.getCurrentUser();
                //do something
                //You can call register class or function here


            } else {

                Log.d(TAG, "Is Old User!");
                //Do something else


            }
        }

    });

}
 类似资料:
  • 问题内容: 我有一个Spring MVC应用程序。它使用自己的自定义登录页面。成功登录后,在HTTPSession中放置一个“ LOGGED_IN_USER”对象。 我只允许经过身份验证的用户访问URL。我知道我可以通过使用网络过滤器来实现。但是,这部分是我想使用Spring Security要做的(我的检查将保持不变-如果已登录,请在HTTPSession中查找’LOGGED_IN_USER’对

  • 我有一个Spring MVC应用程序。它使用自己的自定义登录页面。成功登录后,将在HTTPSession中放置一个“LOGGED\u IN\u USER”对象。 我想只允许经过身份验证的用户访问URL。我知道我可以通过使用Web过滤器来实现这一点。但是,这部分我想使用Spring Security来完成(我的检查将保持不变-在HTTPS中查找“LOGGED_IN_USER”对象,如果存在,则您已登

  • 可能重复: 无法确定Android设备上是否安装了Google play store 我想做两件事: 1) 检查设备是否安装了Google Play(因为它在某些设备上不可用,如HCL me平板电脑等) 2) 如果安装了Google Play,是否可以判断用户是否使用Google帐户登录?

  • 问题很简单。我想限制来自不同机器/浏览器的相同登录的用户访问:只有一个实时用户会话是可能的。 库用于用户认证和管理。 当然,这可以使用简单的同步化地图等来完成。但问题是:是否为此制定了特殊机制? 这个问题的另一个变体:如何检索使用< code>apache shiro登录系统的所有主题的列表? UPD: 澄清我的问题。我的愿望是有一些这样的代码(我知道,没有这样的类异常,但这个想法必须更干净):

  • 问题内容: 我正在开发一个网站,要求用户必须登录才能使用该系统。当前功能为:当用户输入用户名和密码时,将在数据库中进行检查以检查该用户是否存在以及是否输入了正确的密码。然后才允许该用户登录。 到现在为止还不错,现在客户端希望向日志记录功能添加更多功能,即客户端只希望该用户存在一个会话。 IE。如果user1是从PC的一个浏览器登录的,则不应允许他从另一个系统或同一PC的另一个浏览器登录。 我怎么做

  • 问题内容: 我正在看这个网站,但似乎无法弄清楚该怎么做,因为它不起作用。我需要检查当前站点用户是否已登录(已验证),并且正在尝试: 尽管确定用户已登录,但它仅返回: 我可以执行其他请求(来自上面url的第一部分),例如: 这将返回成功的响应。 问题答案: Django 1.10+更新:现在是Django 1.10中的属性。为了向后兼容,该方法仍然存在,但在Django 2.0中将被删除。 对于Dj