Ir para o console

Vincular vários provedores de autenticação a uma conta no iOS

Ao vincular as credenciais de provedores de autenticação a contas de usuário existentes, você permite que esses usuários façam login no seu app usando diferentes provedores. O código do Firebase identifica usuários de qualquer provedor de login. Por exemplo, um usuário que fez login com uma senha pode vincular uma conta do Google e usar um desses métodos. Ou um usuário anônimo pode vincular uma conta do Facebook para acessar o app.

Antes de começar

No app, adicione suporte a dois ou mais provedores de autenticação, incluindo autenticação anônima.

Vincular credenciais de provedor de autenticação a uma conta de usuário

Para vincular credenciais de provedor de autenticação a uma conta de usuário, faça o seguinte:

  1. Faça login usando qualquer provedor ou método de autenticação.
  2. Conclua o fluxo de login do novo provedor de autenticação até, mas não incluindo, a chamada de um dos métodos FIRAuth.signInWith. Por exemplo, use o código do token do Google, o token de acesso do Facebook ou o e-mail e a senha.
  3. Tenha um FIRAuthCredential para o novo provedor de autenticação:

    Login do 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 do Facebook
    Swift
    let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    Login com e-mail/senha
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
    
  4. Transmita o objeto FIRAuthCredential para o método linkWithCredential:completion: do usuário conectado:

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

    A chamada para linkWithCredential:completion: falhará se as credenciais já estiverem vinculadas a outra conta de usuário. Nesse caso, você precisará mesclar as contas e os dados associados da maneira apropriada para o app:

    Swift

    let prevUser = Auth.auth().currentUser
    Auth.auth().signIn(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] signInWithCredential: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
                                        // ...
                                    }];
    

Se a chamada para linkWithCredential:completion: tiver sucesso, o usuário poderá fazer login usando qualquer um dos provedores de autenticação vinculados e acessar os mesmos dados do Firebase.

Desvincular um provedor de autenticação de uma conta de usuário

É possível desvincular um provedor de autenticação de uma conta para que o usuário não possa mais fazer login usando esse provedor.

Para desvincular um provedor de autenticação de uma conta de usuário, transmita o código do provedor para o método unlinkFromProvider:completion:. Você pode receber os códigos dos provedores de autenticação vinculados a um usuário pela propriedade 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) {
  // ...
}];