Ir para o console

Autenticar usando o GitHub com JavaScript

Você pode permitir que os usuários façam autenticação no Firebase por meio das contas do GitHub deles. Basta integrar a autenticação do GitHub ao seu app. Você pode fazer isso ao realizar o fluxo de login com o SDK do Firebase ou ao executar o fluxo do OAuth 2.0 do GitHub manualmente e transmitir o token de acesso resultante para o Firebase.

Antes de começar

  1. Adicione o Firebase ao seu projeto do JavaScript.
  2. Registre o app como um aplicativo de desenvolvedor no GitHub e receba o código do cliente e a chave secreta do cliente do OAuth 2.0 do app.
  3. Ative a autenticação do GitHub:
    1. No Console do Firebase, abra a seção Auth.
    2. Na guia Método de login, ative o método de login do GitHub e inclua o ID do cliente do OAuth 2.0 e a chave secreta do cliente que você recebeu do GitHub.
    3. Em seguida, defina o URI de redirecionamento do OAuth do Firebase, por exemplo, my-app-12345.firebaseapp.com/__/auth/handler, como o URL de retorno de chamada de autorização na página de configurações do app no GitHub (em inglês).

Processar o fluxo de login com o SDK do Firebase

Se você está desenvolvendo um app da Web, a maneira mais fácil de autenticar seus usuários com o Firebase usando contas do GitHub é processando o fluxo de login com o SDK para JavaScript do Firebase.Se você quiser autenticar um usuário no Node.js ou em outro ambiente fora do navegador, é preciso processar o fluxo de login manualmente.

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

  1. Crie uma instância do objeto provedor do GitHub:
    var provider = new firebase.auth.GithubAuthProvider();
  2. Opcional: especifique os escopos de OAuth 2.0 adicionais que você deseja solicitar ao provedor de autenticação. Para adicionar um escopo, chame addScope. Por exemplo:
    provider.addScope('repo');
    Consulte a documentação do provedor de autenticação.
  3. Opcional: especifique outros parâmetros personalizados do provedor de OAuth que você quiser enviar com a solicitação de OAuth. Para adicioná-los, chame setCustomParameters no provedor inicializado usando um objeto que tenha a chave especificada na documentação do provedor de OAuth e o valor correspondente. Por exemplo:
    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    
    Os parâmetros de OAuth reservados obrigatórios não são permitidos e serão ignorados. Consulte a referência do provedor de autenticação para saber mais.
  4. Use o objeto do provedor do GitHub para a autenticação no Firebase. Você pode solicitar que os usuários façam login nas contas do GitHub deles em uma janela pop-up ou com redirecionamento para a página de login. O método de redirecionamento é recomendável para dispositivos móveis.
    • Para fazer login com uma janela pop-up, chame signInWithPopup:
      firebase.auth().signInWithPopup(provider).then(function(result) {
        // This gives you a GitHub Access Token. You can use it to access the GitHub API.
        var token = result.credential.accessToken;
        // The signed-in user info.
        var user = result.user;
        // ...
      }).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
        // ...
      });
      Observe que você também pode recuperar o token de OAuth do provedor do GitHub, que pode ser usado para acessar dados adicionais usando as APIs do GitHub.

      Também é nesse local que você pode identificar e corrigir erros. Para ver uma lista de códigos de erro, consulte os Documentos de referência de autenticação.

    • Para redirecionar os usuários para a página de login, chame signInWithRedirect:
      firebase.auth().signInWithRedirect(provider);
      Em seguida, você também pode recuperar o token de OAuth do provedor GitHub ao chamar getRedirectResult quando sua página carregar o seguinte código:
      firebase.auth().getRedirectResult().then(function(result) {
        if (result.credential) {
          // This gives you a GitHub Access Token. You can use it to access the GitHub API.
          var token = result.credential.accessToken;
          // ...
        }
        // The signed-in user info.
        var user = result.user;
      }).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
        // ...
      });
      Também é nesse local que você pode identificar e corrigir erros. Para ver uma lista de códigos de erro, consulte os Documentos de referência de autenticação.

Processar o fluxo de login manualmente

É possível também fazer a autenticação no Firebase com uma conta do GitHub fazendo o processamento do fluxo de login ao chamar os pontos de extremidade do OAuth 2.0 do GitHub:

  1. Integre a autenticação do GitHub no seu app ao seguir as instruções na documentação do desenvolvedor (em inglês). No final do fluxo de login do GitHub, você recebe um token de acesso do OAuth 2.0.
  2. Se você precisar fazer login em um aplicativo Node.js, envie o token de acesso do OAuth para o aplicativo Node.js.
  3. Depois que um usuário fizer login com o GitHub, troque o token de acesso do OAuth 2.0 para uma credencial do Firebase:
    var credential = firebase.auth.GithubAuthProvider.credential(token);
    
  4. Use a credencial do Firebase para fazer a autenticação:
    firebase.auth().signInWithCredential(credential).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // The email of the user's account used.
      var email = error.email;
      // The firebase.auth.AuthCredential type that was used.
      var credential = error.credential;
      // ...
    });

Autenticar com Firebase em uma Extensão do Chrome

Se você estiver criando um app de Extensão do Chrome, coloque o código da extensão na lista de permissões:

  1. Abra seu projeto no Firebase console.
  2. Na seção Autenticação, abra a página Método de login.
  3. Adicione um URI como o seguinte à lista de domínios autorizados:
    chrome-extension://CHROME_EXTENSION_ID

Somente as operações pop-up (signInWithPopup e linkWithPopup) estão disponíveis para as Extensões do Chrome. Isso ocorre porque as extensões não podem usar redirecionamentos HTTP. Chame esses métodos a partir de um script em segundo plano porque, se usar o pop-up de ação do navegador, ele será cancelado pelo pop-up de autenticação.

No arquivo de manifesto da sua extensão do Chrome, adicione o URL https://apis.google.com à lista de permissões content_security_policy.

Próximas etapas

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 seus apps, a maneira recomendada para descobrir o status de autenticação do usuário é definir um observador no objeto Auth. Você pode coletar as informações básicas do perfil do usuário do objeto User. 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. Basta vincular as credenciais desses provedores a uma conta de usuário.

Para desconectar um usuário, chame signOut:

firebase.auth().signOut().then(function() {
  // Sign-out successful.
}).catch(function(error) {
  // An error happened.
});