处理已使用的电子邮件地址- Firebase身份验证

23c0lvtd  于 2023-01-09  发布在  其他
关注(0)|答案(3)|浏览(173)

我的应用程序通过Firebase集成了gmail和facebook认证。我注意到如果有人先注册gmail,然后再注册Facebook,如果Facebook的电子邮件与gmail相同,那么他们会收到错误消息:
“电子邮件地址已被其他帐户使用。”
唯一合理的处理方法是告诉用户使用不同的凭据登录吗?也许显示一条消息,如“电子邮件已在使用中,请使用不同的帐户注册”?

6kkfgxo0

6kkfgxo01#

有三种方法可以处理这个问题。
第一个是验证电子邮件地址是否存在,然后显示一条消息,这正是你所说的,消息由你决定。
第二种方法是允许用户在每个邮箱地址上拥有多个账户。换句话说,如果用户注册了Gmail,然后又注册了Facebook,而他拥有相同的邮箱地址,那么他最终会拥有2个不同的账户。一个邮箱地址,2个不同的账户这不是一个好的做法,但根据你的需要,你甚至可以使用它。
第三种方法是每个电子邮件地址只有一个帐户。这意味着您可以防止用户使用同一个电子邮件地址通过不同的身份验证提供商创建多个帐户。这是一种常见做法,也是Firebase控制台中的默认规则。这意味着,稍后您将需要通过另一个提供商实现另一种身份验证,并且它将遵循相同的规则。在这种情况下,只有一个电子邮件地址和一个帐户。
要启用或禁用此选项,请转到Firebase控制台,选择Authentication,选择SIGN-IN METHOD选项卡,然后在页面底部找到Advanced部分。

oug3syen

oug3syen2#

这种情况发生在我身上,是因为我调用的方法错误。使用signinWithEmailAndPassword

iqxoj9l9

iqxoj9l93#

由于有很多类似的问题,这个主题,我张贴我的方法,这个错误,因为我没有找到一个答案,适合一个特定的情况。
假设您启用了电子邮件登录和Facebook登录,用户首先通过电子邮件登录注册,然后尝试使用同一个电子邮件登录Facebook。现在,如果您不想将此帐户与现有帐户链接,或者不想使用一个电子邮件启用多个帐户,你可以添加一条吐司消息,通知用户该邮件已被使用,这样他就不能通过Facebook登录了。以下是我处理用户试图通过Facebook注册一个已经存在的电子邮件时的错误的方法:

private void handleFacebookAccessToken(AccessToken token) {
        Log.d(TAG, "handleFacebookAccessToken:" + token);

        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){

                                // Sign in success, update UI with the signed-in user's information
                                Log.d(TAG, "signInWithCredential:success");
                                FirebaseUser user = mAuth.getCurrentUser();
                                getTokenId();
                                updateUI(user);

                        } else {
                            Toast.makeText(SignInActivity.this, "Your Facebook email is already in use.", Toast.LENGTH_LONG).show();
                        }
                    }
                });
    }

我基本上使用了Firebase提供的代码,并添加了if-else语句(if (task.isSuccessful())
希望能对人有所帮助!

相关问题