콘솔로 이동

Unity에서 계정에 여러 인증 제공업체 연결하기

인증 제공업체의 사용자 인증 정보를 기존 사용자 계정에 연결하면 사용자가 여러 인증 제공업체를 통해 앱에 로그인할 수 있습니다. 사용자가 로그인할 때 어떤 인증 제공업체를 사용하든 동일한 Firebase 사용자 ID로 본인 확인이 가능합니다. 예를 들어 비밀번호로 로그인한 사용자가 Google 계정을 연결하고 나중에 비밀번호나 인증 제공업체 중 어느 방법으로든 로그인할 수 있습니다. 또는 익명 사용자가 Facebook 계정을 연결하면 나중에 Facebook으로 로그인해서 앱을 계속 사용할 수 있습니다.

시작하기 전에

앱에 2개 이상의 인증 제공업체(익명 인증 포함)에 대한 지원을 추가하세요.

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. 다음과 같이 Firebase.Auth.Credential 객체를 로그인한 사용자의 LinkWithCredentialAsync 메소드에 전달합니다.

    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 메소드에 전달합니다. 사용자에게 연결된 인증 제공업체의 제공업체 ID를 가져오려면 ProviderData를 호출합니다.

// 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);
});