2016-07-27 1 views
12

Google에서 firebase를 사용하고 있는데 사용자 인증에 문제가 있습니다. 페이스 북으로 로깅 한 후에 AuthStateListener에서 FirebaseUser를 얻지 만이 사용자가 페이스 북을 통해 로그인했는지 또는 다르게 로그인했는지 어떻게 알 수 있습니까? @Frank 반 Puffelen으로페이스 북 인증을 사용하여 Firebase 사용자가 로그인했는지 확인하는 방법

UPDATE는 는 "페이스 북을"반환해야합니다() getProviderId. FirebaseAuth.getInstance(). getCurrentUser()를 말했지만, 내 경우는 "중포 기지"를 반환합니다. 이제 나는이 행동의 이유가 무엇인지 알 수 없다. 내가 FacebookToken을 왔을 때 나는 같은 것을 할 :

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

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 

         } 

        } 
       }); 

와의 onComplete() 메서드가 호출되기 전에, 내 AuthStateListener은 그것이 있어야로 공급자 ID는 "페이스 북은"없는 사용자를 얻을 수 afterthat

. 내가 뭔가 잘못하고 있는거야? 나는 공식 Google을 따랐다 documentation

+0

나는 FirebaseUser.getProviderId()가 반환합니다 "facebook.com"하지만 내 응용 프로그램은 페이스 북을 사용하지 않는 한 나는 그것을 테스트 할 수 있다고 생각합니다. 가능하다면 시도해 볼까요? –

+0

업데이트 된 질문을보십시오. – Taldakus

답변

28

버전 3.x 이상에서는 단일 사용자가 여러 제공 업체로 로그인 할 수 있습니다. 따라서 단일 공급자 ID에 대한 개념이 더 이상 존재하지 않습니다. 실제로 전화 할 때 :

FirebaseAuth.getInstance().getCurrentUser().getProviderId() 

항상 firebase을 반환합니다.

는 사용자가 페이스 북으로 로그인 한 경우, 당신은 공급자 데이터를 검사해야합니다 탐지하기 : 내가 익명 중포 기지의 계정을 사용하여 내 응용 프로그램에서

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) { 
    if (user.getProviderId().equals("facebook.com")) { 
    System.out.println("User is signed in with Facebook"); 
    } 
} 
+0

불행히도 getProviderId()는 "firebase"를 반환합니다. 나는 나의 질문을 업데이트 할 것이고, 당신이 볼 수 있다면 좋을 것이다. – Taldakus

+2

업데이트의 코드는 내 대답의 첫 번째 부분에서 정확히 설명합니다. 내 두 번째 발췌 문장에있는 루프를 사용 했습니까? 첫번째'UserInfo'는 실제로 공급자 ID'firebase'를 가질 것입니다 (병합 된 사용자를위한 것임). 그러나 두 번째 테스트에는 google.com (Google 제공 업체를 사용)이있었습니다. –

+0

물론 당신 말이 맞습니다! 나는 간단한 실수를했다. ... 고마워. 많은 사람. – Taldakus

3

을, 그리고 페이스 북 계정으로 중포 기지 인증 연결할 때 또는 나는 다음과 같이 확인하고 Google 계정,

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) { 

      if (user.getProviderId().equals("facebook.com")) { 
       //For linked facebook account 
       Log.d("xx_xx_provider_info", "User is signed in with Facebook"); 


      } else if (user.getProviderId().equals("google.com")) { 
       //For linked Google account 
       Log.d("xx_xx_provider_info", "User is signed in with Google"); 
      } 

} 
관련 문제