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. Para saber como ativar o Identity Platform e fazer login, consulte o Guia de início rápido.
Configurar o Twitter como um provedor
Para configurar o Twitter como um provedor de identidade:
- Acesse a página Provedores de identidade no console 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 tiver 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 aplicativo do Twitter. Se você configurou um domínio personalizado no Identity Platform,
atualize o URI de redirecionamento na configuração do app do Twitter 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 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; // ... });
Depois de ter um token de acesso, você pode 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"'
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.