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

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

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

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

시작하기 전에

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

FirebaseAuth 클래스는 모든 API 호출을 위한 게이트웨이입니다. FirebaseAuth.DefaultInstance 를 통해 액세스할 수 있습니다.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

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

    Google 로그인
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    
    Facebook 로그인
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    
    이메일 비밀번호 로그인
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. 로그인한 사용자의 LinkWithCredentialAsync 메서드에 Firebase.Auth.Credential 객체를 전달합니다.

    auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("LinkWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

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

    // Gather data for the currently signed in User.
    string currentUserId = auth.CurrentUser.UserId;
    string currentEmail = auth.CurrentUser.Email;
    string currentDisplayName = auth.CurrentUser.DisplayName;
    System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl;
    
    // Sign in with the new credentials.
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });
    

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

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

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

// Unlink the sign-in provider from the currently active user.
// providerIdString is a string identifying a provider,
// retrieved via FirebaseAuth.FetchProvidersForEmail().
auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("UnlinkAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("UnlinkAsync encountered an error: " + task.Exception);
    return;
  }

  // The user has been unlinked from the provider.
  Firebase.Auth.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});