Fazer login de usuários com o Google
Neste documento, mostramos como usar o Identity Platform para fazer login de usuários com o Google.
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 Google como um provedor
Para configurar o Google como um provedor de identidade:
- Acesse a página Provedores de identidade no console Google Cloud .
- Clique em Adicionar um provedor.
- Selecione Google na lista.
- Insira o ID do cliente da Web e o Secret da Web do Google. Se você ainda não tiver um ID e um secret, poderá conseguir na página APIs e serviços.
- Para permitir o acesso de IDs de clientes externos, clique em Adicionar e adicione seu ID do cliente.
- Para configurar a tela de consentimento, clique em Configurar tela. A página Plataforma de autenticação do Google será aberta em outra guia.
- Na página Plataforma de autenticação do Google, configure a tela de permissão OAuth.
-
Volte para a página Provedores de identidade. 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 do provedor do Google:
Versão 9 para a Web
import { GoogleAuthProvider } from "firebase/auth"; const provider = new GoogleAuthProvider();
Versão 8 para a Web
var provider = new firebase.auth.GoogleAuthProvider();
-
Opcional: adicione escopos do OAuth. Os escopos especificam quais dados você está
solicitando ao Google. 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('https://www.googleapis.com/auth/contacts.readonly');
Versão 8 para a Web
provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
-
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 Google e costumam ser 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({ 'login_hint': 'user@example.com' });
Versão 8 para a Web
provider.setCustomParameters({ 'login_hint': 'user@example.com' });
-
Use o objeto do provedor do Google para fazer login do usuário. É possível
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, GoogleAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // This gives you a Google Access Token. You can use it to access the Google API. const credential = GoogleAuthProvider.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 = GoogleAuthProvider.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 Google Access Token. You can use it to access the Google 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 Google chamando
getRedirectResult()
quando sua página for carregada:Versão 9 para a Web
import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // This gives you a Google Access Token. You can use it to access Google APIs. const credential = GoogleAuthProvider.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 = GoogleAuthProvider.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 Google Access Token. You can use it to access the Google 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 receber um token de acesso, você pode usá-lo para chamar a API do Google. Exemplo:
REST
curl -H "Authorization: Bearer [TOKEN]" https://www.googleapis.com/oauth2/v2/userinfo
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 Google ao seu app seguindo as etapas na documentação do desenvolvedor.
- Faça o login do usuário com o Google usando o fluxo implementado na etapa anterior.
-
Troque o token que o Google recebeu por uma
credencial do Identity Platform:
Versão 9 para a Web
import { GoogleAuthProvider } from "firebase/auth"; const credential = GoogleAuthProvider.credential(idToken);
Versão 8 para a Web
var credential = firebase.auth.GoogleAuthProvider.credential(idToken);
-
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.