Fazer login de usuários com o GitHub
Neste documento, mostramos como usar o Identity Platform para fazer login de usuários com o GitHub.
Antes de começar
Neste tutorial, pressupomos que você já tenha ativado o Identity Platform e tenha um aplicativo da Web básico escrito usando HTML e JavaScript. Para saber como ativar o Identity Platform e fazer login, consulte o Guia de início rápido.
Configurar o GitHub como um provedor
Para configurar o GitHub como provedor de identidade:
- Acesse a página Provedores de identidade no console Google Cloud .
- Clique em Adicionar um provedor.
- Selecione GitHub na lista.
- Digite o ID do cliente e a chave secreta do cliente do GitHub. Se você ainda não tiver um ID e um secret, poderá conseguir um na página Aplicativos do GitHub.
-
Configure o URI listado em Configurar o GitHub como um URI de redirecionamento do
OAuth válido para seu app do GitHub. Se você configurou um domínio personalizado no Identity Platform,
atualize o URI de redirecionamento na configuração do app do GitHub para usar o domínio personalizado em vez
do domínio padrão. Por exemplo, mude
https://myproject.firebaseapp.com/__/auth/handler
parahttps://auth.myownpersonaldomain.com/__/auth/handler
. -
No painel lateral Configurações do projeto, clique em Adicionar domínio e adicione o domínio do seu
app.
Recomendamos que você não inclua
localhost
nos seus projetos de produção. - Na seção Configurar seu aplicativo, clique em Detalhes de configuração. Copie o snippet no código do aplicativo para inicializar o SDK de cliente do Identity Platform.
- Clique em Salvar.
Fazer login de usuários com o SDK do cliente
-
Crie uma instância do objeto provedor do GitHub:
Versão 9 para a Web
import { GithubAuthProvider } from "firebase/auth"; const provider = new GithubAuthProvider();
Versão 8 para a Web
var provider = new firebase.auth.GithubAuthProvider();
-
Opcional: adicione escopos do OAuth. Os escopos especificam quais dados você está
solicitando do GitHub. Dados mais confidenciais podem exigir escopos
específicos. Consulte a documentação
do provedor
para determinar quais escopos são necessários para seu aplicativo.
Versão 9 para a Web
provider.addScope('repo');
Versão 8 para a Web
provider.addScope('repo');
-
Opcional: localize o fluxo de autenticação. É possível especificar uma linguagem
ou usar a linguagem padrão do dispositivo:
Versão 9 para a Web
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // auth.useDeviceLanguage();
Versão 8 para a Web
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
-
Opcional: especifique outros parâmetros de OAuth personalizados. Eles são
específicos do GitHub e normalmente são usados para personalizar a
experiência de autenticação. Não é possível transmitir parâmetros reservados pelo OAuth ou pelo
Identity Platform.
Versão 9 para a Web
provider.setCustomParameters({ 'allow_signup': 'false' });
Versão 8 para a Web
provider.setCustomParameters({ 'allow_signup': 'false' });
-
Use o objeto de provedor do GitHub para fazer login do usuário. Você pode
abrir uma janela pop-up ou redirecionar a página atual. O redirecionamento é mais fácil
para usuários em dispositivos móveis.
Para mostrar um pop-up, chame
signInWithPopup()
:Versão 9 para a Web
import { getAuth, signInWithPopup, GithubAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // This gives you a GitHub Access Token. You can use it to access the GitHub API. const credential = GithubAuthProvider.credentialFromResult(result); const token = credential.accessToken; // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GithubAuthProvider.credentialFromError(error); // ... });
Versão 8 para a Web
firebase .auth() .signInWithPopup(provider) .then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a GitHub Access Token. You can use it to access the GitHub API. var token = credential.accessToken; // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((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; // ... });
Para redirecionar a página, primeiro chame
signInWithRedirect()
.Siga as práticas recomendadas ao usar
signInWithRedirect
,linkWithRedirect
oureauthenticateWithRedirect
.Versão 9 para a Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Versão 8 para a Web
firebase.auth().signInWithRedirect(provider);
Em seguida, recupere o token do GitHub chamando
getRedirectResult()
quando a página for carregada:Versão 9 para a Web
import { getAuth, getRedirectResult, GithubAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { const credential = GithubAuthProvider.credentialFromResult(result); if (credential) { // This gives you a GitHub Access Token. You can use it to access the GitHub API. const token = credential.accessToken; // ... } // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GithubAuthProvider.credentialFromError(error); // ... });
Versão 8 para a Web
firebase.auth() .getRedirectResult() .then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a GitHub Access Token. You can use it to access the GitHub API. var token = credential.accessToken; // ... } // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((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; // ... });
Depois de ter um token de acesso, você pode usá-lo para chamar a API do GitHub. Exemplo:
REST
curl -H "Authorization: Bearer [TOKEN]" https://api.github.com/gists/starred
Fazer login manual dos usuários
Se você não quiser usar o SDK do cliente, também poderá processar o fluxo de login manualmente:
- Integre a autenticação do GitHub no seu app ao seguir as etapas na documentação do desenvolvedor.
- Faça login do usuário com o GitHub usando o fluxo implementado na etapa anterior.
-
Troque o token que você recebeu do GitHub por uma
credencial do Identity Platform:
Versão 9 para a Web
import { GithubAuthProvider } from "firebase/auth"; const credential = GithubAuthProvider.credential(token);
Versão 8 para a Web
var credential = firebase.auth.GithubAuthProvider.credential(token);
-
Use a credencial para fazer login do usuário com o Identity Platform:
Versão 9 para a Web
import { getAuth, signInWithCredential } from "firebase/auth"; // Sign in with the credential from the user. const auth = getAuth(); signInWithCredential(auth, credential) .then((result) => { // Signed in // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // ... });
Versão 8 para a Web
// Sign in with the credential from the user. firebase.auth() .signInWithCredential(credential) .then((result) => { // Signed in // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.email; // ... });
A seguir
- Saiba mais sobre os usuários do Identity Platform.
- Faça login dos usuários com outros provedores de identidade.