Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

Android의 계정에 여러 인증 공급자 연결

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

인증 공급자 자격 증명을 기존 사용자 계정에 연결하여 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 허용할 수 있습니다. 사용자는 로그인에 사용한 인증 제공업체에 관계없이 동일한 Firebase 사용자 ID로 식별할 수 있습니다. 예를 들어 비밀번호로 로그인한 사용자는 Google 계정을 연결하고 나중에 두 가지 방법 중 하나로 로그인할 수 있습니다. 또는 익명의 사용자가 Facebook 계정을 연결한 다음 나중에 Facebook에 로그인하여 앱을 계속 사용할 수 있습니다.

시작하기 전에

앱에 둘 이상의 인증 공급자(익명 인증 포함)에 대한 지원을 추가합니다.

인증 공급자 자격 증명을 기존 사용자 계정에 연결하려면:

  1. 인증 공급자 또는 방법을 사용하여 사용자를 로그인합니다.
  2. FirebaseAuth.signInWith 메서드 중 하나를 호출할 때까지 새 인증 공급자에 대한 로그인 흐름을 완료합니다. 예를 들어 사용자의 Google ID 토큰, Facebook 액세스 토큰 또는 이메일 및 비밀번호를 가져옵니다.
  3. 새 인증 공급자에 대한 AuthCredential 을 가져옵니다.

    구글 로그인

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    페이스북 로그인

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin+KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    이메일-비밀번호 로그인

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. 로그인한 사용자의 linkWithCredential 메서드에 AuthCredential 객체를 전달합니다.

    Java

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

    Kotlin+KTX

    auth.currentUser!!.linkWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    Log.d(TAG, "linkWithCredential:success")
                    val user = task.result?.user
                    updateUI(user)
                } else {
                    Log.w(TAG, "linkWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }

    자격 증명이 이미 다른 사용자 계정에 연결된 경우 linkWithCredential 에 대한 호출이 실패합니다. 이 상황에서는 앱에 적절하게 계정 및 관련 데이터 병합을 처리해야 합니다.

    Java

    FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser();
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    FirebaseUser currentUser = task.getResult().getUser();
                    // Merge prevUser and currentUser accounts and data
                    // ...
                }
            });

    Kotlin+KTX

    val prevUser = auth.currentUser
    auth.signInWithCredential(credential)
            .addOnSuccessListener { result ->
                val currentUser = result.user
                // Merge prevUser and currentUser accounts and data
                // ...
            }
            .addOnFailureListener {
                // ...
            }

linkWithCredential 에 대한 호출이 성공하면 이제 사용자는 연결된 인증 공급자를 사용하여 로그인하고 동일한 Firebase 데이터에 액세스할 수 있습니다.

사용자가 더 이상 해당 공급자로 로그인할 수 없도록 계정에서 인증 공급자의 연결을 해제할 수 있습니다.

사용자 계정에서 인증 공급자의 연결을 해제하려면 공급자 ID를 unlink 메서드에 전달합니다. getProviderData 를 호출하여 사용자에게 연결된 인증 공급자의 공급자 ID를 가져올 수 있습니다.

Java

mAuth.getCurrentUser().unlink(providerId)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Auth provider unlinked from account
                    // ...
                }
            }
        });

Kotlin+KTX

Firebase.auth.currentUser!!.unlink(providerId)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Auth provider unlinked from account
                // ...
            }
        }