Ir para o console

Autenticar usando o Yahoo com JavaScript

Permita que os usuários se autentiquem com o Firebase usando provedores OAuth, como o Yahoo. Basta integrar o login genérico do OAuth ao seu app usando o SDK do Firebase para realizar o fluxo de login completo.

Antes de começar

Para fazer login de usuários usando contas do Yahoo, primeiro ative o Yahoo como um provedor de login do seu projeto do Firebase:

  1. Adicione o Firebase ao projeto do iOS.
  2. No Console do Firebase, abra a seção Auth.
  3. Na guia Método de login, ative o provedor Yahoo.
  4. Adicione o ID do cliente e a chave secreta do cliente do console de desenvolvimento às configurações do provedor.
    1. Para registrar um cliente OAuth do Yahoo, siga as instruções do Yahoo sobre como registrar um aplicativo da Web no Yahoo.
    2. Ao registrar apps nesses provedores, registre o domínio *.firebaseapp.com do seu projeto como o domínio de redirecionamento do seu aplicativo.
  5. Clique em Salvar.

Processar o fluxo de login com o SDK do Firebase

Para processar o fluxo de login com o SDK do Firebase para iOS, siga estas etapas:

  1. Adicione esquemas de URL personalizado ao seu projeto do XCode:

    1. Abra a configuração do seu projeto clicando duas vezes no nome dele na visualização em árvore à esquerda. Selecione seu app na seção DESTINOS. Em seguida, selecione a guia Informações e expanda a seção Tipos de URL.
    2. Clique no botão + e adicione um esquema de URL ao código do cliente revertido. Para encontrar esse valor, abra o arquivo de configuração GoogleService-Info.plist e procure a chave REVERSED_CLIENT_ID. Copie e cole o valor da chave na caixa Esquemas de URL na página de configuração. Deixe os outros campos em branco.

      Quando concluída, a configuração será semelhante à mostrada a seguir, mas com os valores específicos do seu app:

  2. Crie uma instância de um OAuthProvider usando o código de provedor yahoo.com.

    Swift

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

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"yahoo.com"];
        
  3. Opcional: especifique os parâmetros OAuth personalizados que você quer enviar com a solicitação OAuth.

    Swift

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

    Objective-C

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

    Para saber quais parâmetros são aceitos pelo Yahoo, consulte a documentação do OAuth do Yahoo (em inglês). Não é possível transmitir os parâmetros exigidos pelo Firebase com setCustomParameters. Esses parâmetros são client_id, redirect_uri, response_type, scope e state.

  4. Opcional: especifique os outros escopos de OAuth 2.0 além do perfil básico que você quer solicitar ao provedor de autenticação. Se o aplicativo exigir acesso a dados particulares de usuários das APIs do Yahoo, você precisará solicitar permissões em Permissões de API no console de desenvolvimento do Yahoo. Os escopos OAuth solicitados precisam corresponder exatamente àqueles pré-configurados nas permissões da API do app. Por exemplo, se o acesso de leitura/gravação for obrigatório para os contatos do usuário e estiver pré-configurado nas permissões da API do aplicativo, será preciso transmitir sdct-w, e não o escopo somente leitura sdct-r do OAuth. Caso contrário, o fluxo falhará e um erro será mostrado ao usuário final.

    Swift

        // 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"]
        

    Objective-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 do escopo do Yahoo (em inglês).

  5. Opcional: para personalizar a forma como o app apresenta o SFSafariViewController ou o UIWebView ao exibir o reCAPTCHA ao usuário, crie uma classe personalizada que esteja em conformidade com o protocolo FIRAuthUIDelegate e transmita-a para getCredentialWithUIDelegate:completion:.

  6. Use o objeto de provedor do OAuth para a autenticação no Firebase.

    Swift

        provider.getCredentialWithUIDelegate(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth().signInAndRetrieveData(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:
              // credential.accessToken
              // Yahoo OAuth ID token can be retrieved by calling:
              // credential.idToken
            }
          }
        }
        

    Objective-C

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInAndRetrieveDataWithCredential: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:
              // credential.accessToken
              // Yahoo OAuth ID token can be retrieved by calling:
              // credential.idToken
            }];
          }
        }];
        

    Com o token de acesso OAuth, é possível chamar a API do Yahoo (em inglês).

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

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

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

  7. Embora os exemplos acima se concentrem nos fluxos de login, também é possível 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 o login com qualquer um deles.

    Swift

        Auth().currentUser.linkAndRetrieveData(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:
          // credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // credential.idToken
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            linkAndRetrieveDataWithCredential: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:
          // credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // credential.idToken
        }];
        
  8. É possível usar o mesmo padrão com reauthenticateWithPopupreauthenticateWithRedirect, que pode ser utilizado para recuperar credenciais novas de operações confidenciais que exigem um login recente.

    Swift

        Auth().currentUser.reauthenticateAndRetrieveDataWithCredential(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:
          // credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // credential.idToken
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            reauthenticateAndRetrieveDataWithCredential: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:
          // credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // credential.idToken
        }];
        

A seguir

Depois que um usuário faz login pela primeira vez, uma nova conta é criada e vinculada às credenciais, que podem ser o número do telefone, o nome de usuário e a senha ou as informações do provedor de autenticação. Essa nova conta é armazenada como parte do projeto do Firebase. Ela pode ser usada para identificar um usuário em todos os apps do projeto, independentemente do método de login usado.

  • Nos apps, é possível acessar as informações básicas de perfil do usuário a partir do objeto FIRUser. Consulte Gerenciar usuários.

  • Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível usar a variável auth para encontrar o código exclusivo do usuário conectado. Use essa informação para controlar os dados que os usuários podem acessar.

Os usuários podem fazer login no app usando vários provedores de autenticação. Para fazer isso, basta vincular as credenciais desses provedores a uma conta de usuário.

Para desconectar um usuário, chame signOut:.

Swift

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

Objective-C

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

Adicione também o código de gerenciamento dos possíveis erros de autenticação. Consulte Solucionar erros.