Como fazer login de usuários com o Twitter
Este documento mostra como usar o Identity Platform para fazer login de usuários com o Twitter.
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. Consulte o Guia de início rápido para saber como.
Como configurar o Twitter como um provedor
Para configurar o Twitter como um provedor de identidade:
Acesse a página Provedores de identidade no console do Google Cloud.
Clique em Adicionar um provedor.
Selecione Twitter na lista.
Digite o ID do aplicativo e o secret do aplicativo do Twitter. Se você ainda não tem um ID e um secret, poderá conseguir na página Aplicativos do Twitter.
Configure o URI listado em Configurar o Twitter como um URI de redirecionamento OAuth válido para seu app do Twitter. Se você configurou um domínio personalizado na Plataforma de Identidade, atualize o URI de redirecionamento na configuração do app do Twitter para usar o domínio personalizado em vez do padrão. Por exemplo, mude
https://myproject.firebaseapp.com/__/auth/handler
parahttps://auth.myownpersonaldomain.com/__/auth/handler
.Registre os domínios do seu aplicativo clicando em Adicionar domínio em Domínios autorizados. Para fins de desenvolvimento,
localhost
já está ativado por padrão.Em Configurar seu aplicativo, clique em Detalhes de configuração. Copie o snippet no código do aplicativo para inicializar o SDK do cliente do Identity Platform.
Clique em Save.
Como fazer login dos usuários com o SDK do cliente
Crie uma instância do objeto de provedor do Twitter:
Versão 9 para a Web
import { TwitterAuthProvider } from "firebase/auth"; const provider = new TwitterAuthProvider();
Versão 8 para a Web
var provider = new firebase.auth.TwitterAuthProvider();
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 para o Twitter 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({ 'lang': 'es' });
Versão 8 para a Web
provider.setCustomParameters({ 'lang': 'es' });
Use o objeto do provedor do Twitter 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, TwitterAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // This gives you a the Twitter OAuth 1.0 Access Token and Secret. // You can use these server side with your app's credentials to access the Twitter API. const credential = TwitterAuthProvider.credentialFromResult(result); const token = credential.accessToken; const secret = credential.secret; // 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 = TwitterAuthProvider.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 the Twitter OAuth 1.0 Access Token and Secret. // You can use these server side with your app's credentials to access the Twitter API. var token = credential.accessToken; var secret = credential.secret; // 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 Twitter chamando
getRedirectResult()
quando sua página for carregada:Versão 9 para a Web
import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // This gives you a the Twitter OAuth 1.0 Access Token and Secret. // You can use these server side with your app's credentials to access the Twitter API. const credential = TwitterAuthProvider.credentialFromResult(result); const token = credential.accessToken; const secret = credential.secret; // ... // 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 = TwitterAuthProvider.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 the Twitter OAuth 1.0 Access Token and Secret. // You can use these server side with your app's credentials to access the Twitter API. var token = credential.accessToken; var secret = credential.secret; // ... } // 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; // ... });
Quando você tiver um token de acesso, poderá usá-lo para chamar a API do Twitter. Exemplo:
REST
curl --request POST --url 'https://api.twitter.com/1.1/statuses/update.json?status=Hello%20world' --header 'authorization: OAuth oauth_consumer_key="CONSUMER_API_KEY", oauth_nonce="OAUTH_NONCE", oauth_signature="OAUTH_SIGNATURE", oauth_signature_method="HMAC-SHA1", oauth_timestamp="OAUTH_TIMESTAMP", oauth_token="ACCESS_TOKEN", oauth_version="1.0"'
Como 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 Twitter ao seu aplicativo seguindo as etapas na documentação do desenvolvedor.
Faça login no usuário com o Twitter usando o fluxo que você implementou na etapa anterior.
Troque o token que você recebeu do Twitter por uma credencial do Identity Platform:
Versão 9 para a Web
import { TwitterAuthProvider } from "firebase/auth"; const credential = TwitterAuthProvider.credential(accessToken, secret);
Versão 8 para a Web
var credential = firebase.auth.TwitterAuthProvider.credential(accessToken, secret);
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.