Autenticar usando Yahoo em plataformas Apple

Você pode permitir que seus usuários se autentiquem com o Firebase usando provedores OAuth como o Yahoo, integrando o login genérico do OAuth ao seu aplicativo usando o SDK do Firebase para realizar o fluxo de login de ponta a ponta.

Antes de você começar

Para fazer login de usuários usando contas do Yahoo, primeiro você deve ativar o Yahoo como provedor de login para seu projeto do Firebase:

  1. Adicione o Firebase ao seu projeto Apple .
  2. No console do Firebase , abra a seção Auth .
  3. Na guia Método de login , habilite o provedor Yahoo .
  4. Adicione o ID do cliente e o segredo do cliente do console do desenvolvedor desse provedor à configuração do provedor:
    1. Para registrar um cliente Yahoo OAuth, siga a documentação do desenvolvedor do Yahoo sobre como registrar um aplicativo Web no Yahoo .

      Certifique-se de selecionar as duas permissões da API OpenID Connect: profile e email .

    2. Ao registrar aplicativos com esses provedores, registre o domínio *.firebaseapp.com do seu projeto como o domínio de redirecionamento do seu aplicativo.
  5. Clique em Salvar .

Lidar com o fluxo de login com o SDK do Firebase

Para lidar com o fluxo de login com o SDK das plataformas Apple do Firebase, siga estas etapas:

  1. Adicione esquemas de URL personalizados ao seu projeto Xcode:

    1. Abra a configuração do seu projeto: clique duas vezes no nome do projeto na visualização em árvore à esquerda. Selecione seu aplicativo na seção TARGETS , selecione a guia Informações e expanda a seção Tipos de URL .
    2. Clique no botão + e adicione seu ID de aplicativo codificado como um esquema de URL. Você pode encontrar o ID do aplicativo codificado na página Configurações gerais do console do Firebase, na seção do seu aplicativo iOS. Deixe os demais campos em branco.

      Quando concluída, sua configuração deverá ser semelhante à seguinte (mas com os valores específicos do seu aplicativo):

      Captura de tela da interface de configuração do esquema de URL personalizado do Xcode

  2. Crie uma instância de um OAuthProvider usando o ID do provedor yahoo.com .

    Rápido

    var provider = OAuthProvider(providerID: "yahoo.com")
        

    Objetivo-C

    FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"yahoo.com"];
        
  3. Opcional : Especifique parâmetros OAuth customizados adicionais que você deseja enviar com a solicitação OAuth.

    Rápido

    provider.customParameters = [
    "prompt": "login",
    "language": "fr"
    ]
        

    Objetivo-C

    [provider setCustomParameters:@{@"prompt": @"login", @"language": @"fr"}];
        

    Para obter os parâmetros suportados pelo Yahoo, consulte a documentação do Yahoo OAuth . Observe que você não pode transmitir parâmetros exigidos pelo Firebase com setCustomParameters . Esses parâmetros são client_id , redirect_uri , response_type , scope e state .

  4. Opcional : Especifique escopos adicionais do OAuth 2.0 além profile e email que você deseja solicitar do provedor de autenticação. Se o seu aplicativo exigir acesso a dados privados de usuários das APIs do Yahoo, você precisará solicitar permissões para as APIs do Yahoo em Permissões de API no console do desenvolvedor do Yahoo. Os escopos OAuth solicitados devem corresponder exatamente aos pré-configurados nas permissões da API do aplicativo. Por exemplo, se o acesso de leitura/gravação for solicitado aos contatos do usuário e pré-configurado nas permissões da API do aplicativo, sdct-w deverá ser passado em vez do escopo OAuth somente leitura sdct-r . Caso contrário, o fluxo falhará e um erro será mostrado ao usuário final.

    Rápido

    // Request access to Yahoo Mail API.
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    provider.scopes = ["mail-r", "sdct-w"]
        

    Objetivo-C

    // Request access to Yahoo Mail API.
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    [provider setScopes:@[@"mail-r", @"sdct-w"]];
        

    Para saber mais, consulte a documentação de escopos do Yahoo .

  5. Opcional : se você quiser personalizar a forma como seu aplicativo apresenta o SFSafariViewController ou UIWebView ao exibir o reCAPTCHA para o usuário, crie uma classe personalizada que esteja em conformidade com o protocolo AuthUIDelegate e passe-a para credentialWithUIDelegate .

  6. Autentique-se com o Firebase usando o objeto do provedor OAuth.

    Rápido

    provider.getCredentialWith(nil) { credential, error in
    if error != nil {
    // Handle error.
    }
    if credential != nil {
    Auth().signIn(with: credential) { authResult, error in
      if error != nil {
        // Handle error.
      }
      // User is signed in.
      // IdP data available in authResult.additionalUserInfo.profile.
      // Yahoo OAuth access token can also be retrieved by:
      // (authResult.credential as? OAuthCredential)?.accessToken
      // Yahoo OAuth ID token can be retrieved by calling:
      // (authResult.credential as? OAuthCredential)?.idToken
    }
    }
    }
        

    Objetivo-C

    [provider getCredentialWithUIDelegate:nil
                           completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
    if (error) {
    // Handle error.
    }
    if (credential) {
    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
      if (error) {
        // Handle error.
      }
      // User is signed in.
      // IdP data available in authResult.additionalUserInfo.profile.
      // Yahoo OAuth access token can also be retrieved by:
      // ((FIROAuthCredential *)authResult.credential).accessToken
      // Yahoo OAuth ID token can be retrieved by calling:
      // ((FIROAuthCredential *)authResult.credential).idToken
    }];
    }
    }];
        

    Usando o token de acesso OAuth, você pode chamar a API do Yahoo .

    Por exemplo, para obter informações básicas de perfil, você pode chamar a API REST, passando o token de acesso no cabeçalho Authorization :

    https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
    

    Onde YAHOO_USER_UID é o ID do usuário do Yahoo que pode ser recuperado do campo Auth.auth.currentUser.providerData[0].uid ou de authResult.additionalUserInfo.profile .

  7. Embora os exemplos acima se concentrem em fluxos de login, você também tem a capacidade de vincular um provedor do Yahoo a um usuário existente usando linkWithPopup . Por exemplo, você pode vincular vários provedores ao mesmo usuário, permitindo que eles façam login com qualquer um deles.

    Rápido

    Auth().currentUser.link(withCredential: credential) { authResult, error in
    if error != nil {
    // Handle error.
    }
    // Yahoo credential is linked to the current user.
    // IdP data available in authResult.additionalUserInfo.profile.
    // Yahoo OAuth access token can also be retrieved by:
    // (authResult.credential as? OAuthCredential)?.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // (authResult.credential as? OAuthCredential)?.idToken
    }
        

    Objetivo-C

    [[FIRAuth auth].currentUser
    linkWithCredential:credential
            completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
    if (error) {
    // Handle error.
    }
    // Yahoo credential is linked to the current user.
    // IdP data available in authResult.additionalUserInfo.profile.
    // Yahoo OAuth access token is can also be retrieved by:
    // ((FIROAuthCredential *)authResult.credential).accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // ((FIROAuthCredential *)authResult.credential).idToken
    }];
        
  8. O mesmo padrão pode ser usado com reauthenticateWithPopup / reauthenticateWithRedirect que pode ser usado para recuperar novas credenciais para operações confidenciais que exigem login recente.

    Rápido

    Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
    if error != nil {
    // Handle error.
    }
    // User is re-authenticated with fresh tokens minted and
    // should be able to perform sensitive operations like account
    // deletion and email or password update.
    // IdP data available in result.additionalUserInfo.profile.
    // Additional OAuth access token is can also be retrieved by:
    // (authResult.credential as? OAuthCredential)?.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // (authResult.credential as? OAuthCredential)?.idToken
    }
        

    Objetivo-C

    [[FIRAuth auth].currentUser
    reauthenticateWithCredential:credential
                      completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
    if (error) {
    // Handle error.
    }
    // User is re-authenticated with fresh tokens minted and
    // should be able to perform sensitive operations like account
    // deletion and email or password update.
    // IdP data available in result.additionalUserInfo.profile.
    // Additional OAuth access token is can also be retrieved by:
    // ((FIROAuthCredential *)authResult.credential).accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // ((FIROAuthCredential *)authResult.credential).idToken
    }];
        

Próximos passos

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais (ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação) com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.

  • Nos seus aplicativos, você pode obter as informações básicas do perfil do usuário no objeto User . Consulte Gerenciar usuários .

  • Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado na variável auth e usá-lo para controlar quais dados um usuário pode acessar.

Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.

Para desconectar um usuário, chame signOut: .

Rápido

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Objetivo-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Você também pode adicionar código de tratamento de erros para toda a gama de erros de autenticação. Consulte Tratamento de erros .