Buka konsol

Menautkan Beberapa Penyedia Auth ke Akun di iOS

Anda dapat mengizinkan pengguna untuk login ke aplikasi Anda menggunakan beberapa penyedia autentikasi, dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada. Pengguna bisa diidentifikasi dengan ID pengguna Firebase yang sama, apa pun penyedia autentikasi yang mereka gunakan untuk login. Misalnya, pengguna yang login dengan sandi bisa menautkan akun Google dan login dengan salah satu metode tersebut di lain waktu. Atau, seorang pengguna anonim bisa menautkan akun Facebook, kemudian login dengan Facebook untuk melanjutkan penggunaan aplikasi Anda.

Sebelum Anda memulai

Tambahkan dukungan untuk dua penyedia autentikasi atau lebih (mungkin dengan menyertakan autentikasi anonim) ke aplikasi Anda.

Menghubungkan kredensial penyedia autentikasi ke akun pengguna

Untuk menautkan kredensial penyedia autentikasi ke akun pengguna yang ada:

  1. Login sebagai pengguna menggunakan penyedia atau metode autentikasi apa pun.
  2. Selesaikan alur login untuk penyedia autentikasi baru hingga, namun tidak termasuk, tahap pemanggilan salah satu metode FIRAuth.signInWith. Misalnya, dapatkan token ID Google, token akses Facebook, atau email dan sandi pengguna.
  3. Dapatkan FIRAuthCredential untuk penyedia autentikasi yang baru:

    Login dengan Google
    Swift
    guard let authentication = user.authentication else { return }
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                      accessToken: authentication.accessToken)
    Objective-C
    GIDAuthentication *authentication = user.authentication;
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                     accessToken:authentication.accessToken];
    Login dengan Facebook
    Swift
    let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    Login dengan email-sandi
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
    
  4. Teruskan objek FIRAuthCredential ke metode linkWithCredential:completion: dari pengguna yang login:

    Swift
        user.linkAndRetrieveData(with: credential) { (authResult, error) in
      // ...
    }}
    
    Objective-C
        [[FIRAuth auth].currentUser linkAndRetrieveDataWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];

    Panggilan ke linkWithCredential:completion: akan gagal jika kredensial sudah disambungkan ke akun pengguna lain. Dalam situasi ini, Anda harus menangani penggabungan akun dan data terkait secara tepat untuk aplikasi Anda:

    Swift

    let prevUser = Auth.auth().currentUser
    Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
      if let error = error {
        // ...
        return
      }
      // User is signed in
      // ...
    }            // Merge prevUser and currentUser accounts and data
                // ...
            }
    

    Objective-C

    FIRUser *prevUser = [FIRAuth auth].currentUser;
    [[FIRAuth auth] signInAndRetrieveDataWithCredential:credential
                                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                                          NSError * _Nullable error) {
      if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];                                    // Merge prevUser and currentUser accounts and data
                                        // ...
                                    }];
    

Jika panggilan ke linkWithCredential:completion: berhasil, pengguna kini dapat login menggunakan penyedia autentikasi yang telah dihubungkan dan mengakses data Firebase yang sama.

Membatalkan tautan penyedia autentikasi dari akun pengguna

Anda dapat membatalkan tautan penyedia autentikasi dari akun, sehingga pengguna tidak dapat login lagi dengan penyedia tersebut.

Untuk membatalkan tautan penyedia autentikasi dari akun pengguna, teruskan ID penyedia ke metode unlinkFromProvider:completion:. Anda dapat memperoleh ID penyedia dari penyedia autentikasi yang terhubung dengan pengguna dari properti providerData.

Swift

Auth.auth().currentUser?.unlink(fromProvider: providerID!) { (user, error) in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser unlinkFromProvider:providerID
                                    completion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
  // ...
}];