Você pode permitir que seus usuários se autentiquem no Firebase usando suas contas do Twitter integrando a autenticação do Twitter ao seu aplicativo. Você pode integrar a autenticação do Twitter usando o SDK do Firebase para realizar o fluxo de login ou executando o fluxo OAuth do Twitter manualmente e passando o token de acesso e o segredo resultantes para o Firebase.
Antes de você começar
- Adicione o Firebase ao seu projeto JavaScript .
- No console do Firebase , abra a seção Auth .
- Na guia Método de login , habilite o provedor do Twitter .
- Adicione a chave de API e o segredo de API do console do desenvolvedor desse provedor à configuração do provedor:
- Registre seu aplicativo como um aplicativo de desenvolvedor no Twitter e obtenha a chave da API OAuth e o segredo da API do seu aplicativo.
- Certifique-se de que seu URI de redirecionamento do Firebase OAuth (por exemplo,
my-app-12345.firebaseapp.com/__/auth/handler
) esteja definido como seu URL de retorno de chamada de autorização na página de configurações do seu aplicativo na configuração do seu aplicativo do Twitter .
- Clique em Salvar .
Lidar com o fluxo de login com o SDK do Firebase
Se você estiver criando um aplicativo da Web, a maneira mais fácil de autenticar seus usuários no Firebase usando suas contas do Twitter é gerenciar o fluxo de login com o SDK JavaScript do Firebase. (Se quiser autenticar um usuário no Node.js ou em outro ambiente que não seja de navegador, você deverá manipular o fluxo de login manualmente.)
Para lidar com o fluxo de login com o SDK JavaScript do Firebase, siga estas etapas:
- Crie uma instância do objeto provedor do Twitter:
import { TwitterAuthProvider } from "firebase/auth";
const provider = new TwitterAuthProvider();var provider = new firebase.auth.TwitterAuthProvider();
- Opcional : para localizar o fluxo OAuth do provedor para o idioma preferencial do usuário sem passar explicitamente os parâmetros OAuth personalizados relevantes, atualize o código do idioma na instância do Auth antes de iniciar o fluxo OAuth. Por exemplo:
import { getAuth } from "firebase/auth";
const auth = getAuth();
auth.languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// auth.useDeviceLanguage();firebase.auth().languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage(); - Opcional : Especifique parâmetros adicionais do provedor OAuth customizado que você deseja enviar com a solicitação OAuth. Para adicionar um parâmetro personalizado, chame
setCustomParameters
no provedor inicializado com um objeto contendo a chave conforme especificado na documentação do provedor OAuth e o valor correspondente. Por exemplo: Parâmetros OAuth obrigatórios reservados não são permitidos e serão ignorados. Consulte a referência do provedor de autenticação para obter mais detalhes.provider.setCustomParameters({
'lang': 'es'
});provider.setCustomParameters({
'lang': 'es'
}); - Autentique-se com o Firebase usando o objeto do provedor do Twitter. Você pode solicitar que seus usuários façam login com suas contas do Twitter abrindo uma janela pop-up ou redirecionando para a página de login. O método de redirecionamento é preferido em dispositivos móveis.
- Para fazer login com uma janela pop-up, chame
signInWithPopup
: Observe também que você pode recuperar o token OAuth do provedor do Twitter, que pode ser usado para buscar dados adicionais usando as APIs do Twitter.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);
// ...
});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;
// ...
});É aqui também que você pode detectar e tratar erros. Para obter uma lista de códigos de erro, consulte os documentos de referência de autenticação .
- Para fazer login redirecionando para a página de login, chame
signInWithRedirect
: siga as práticas recomendadas ao usar `signInWithRedirect`. Em seguida, você também pode recuperar o token OAuth do provedor do Twitter chamandoimport { getAuth, signInWithRedirect } from "firebase/auth";
const auth = getAuth();
signInWithRedirect(auth, provider);firebase.auth().signInWithRedirect(provider);
getRedirectResult
quando sua página for carregada: É aqui também que você pode detectar e tratar erros. Para obter uma lista de códigos de erro, consulte os documentos de referência de autenticação .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);
// ...
});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;
// ...
});
- Para fazer login com uma janela pop-up, chame
Tratamento de erros de conta existente com credenciais diferentes
Se você ativou a configuração Uma conta por endereço de e-mail no console do Firebase , quando um usuário tenta fazer login em um provedor (como o Twitter) com um e-mail que já existe para o provedor de outro usuário do Firebase (como o Google), o erro auth/account-exists-with-different-credential
é lançada junto com um objeto AuthCredential
(token e segredo oauth do Twitter). Para concluir o login no provedor pretendido, o usuário deve primeiro fazer login no provedor existente (Google) e, em seguida, vincular-se ao antigo AuthCredential
(token e segredo oauth do Twitter).
Modo pop-up
Se você usar signInWithPopup
, poderá lidar com erros auth/account-exists-with-different-credential
com código como o exemplo a seguir:
import {
getAuth,
linkWithCredential,
signInWithPopup,
TwitterAuthProvider,
} from "firebase/auth";
try {
// Step 1: User tries to sign in using Twitter.
let result = await signInWithPopup(getAuth(), new TwitterAuthProvider());
} catch (error) {
// Step 2: User's email already exists.
if (error.code === "auth/account-exists-with-different-credential") {
// The pending Twitter credential.
let pendingCred = error.credential;
// Step 3: Save the pending credential in temporary storage,
// Step 4: Let the user know that they already have an account
// but with a different provider, and let them choose another
// sign-in method.
}
}
// ...
try {
// Step 5: Sign the user in using their chosen method.
let result = await signInWithPopup(getAuth(), userSelectedProvider);
// Step 6: Link to the Twitter credential.
// TODO: implement `retrievePendingCred` for your app.
let pendingCred = retrievePendingCred();
if (pendingCred !== null) {
// As you have access to the pending credential, you can directly call the
// link method.
let user = await linkWithCredential(result.user, pendingCred);
}
// Step 7: Continue to app.
} catch (error) {
// ...
}
Modo de redirecionamento
Este erro é tratado de maneira semelhante no modo de redirecionamento, com a diferença de que a credencial pendente deve ser armazenada em cache entre os redirecionamentos de página (por exemplo, usando armazenamento de sessão).
Lidar com o fluxo de login manualmente
Você também pode autenticar com o Firebase usando uma conta do Twitter gerenciando o fluxo de login chamando os endpoints OAuth do Twitter:
- Integre a autenticação do Twitter ao seu aplicativo seguindo a documentação do desenvolvedor . Ao final do fluxo de login do Twitter, você receberá um token de acesso OAuth e um segredo OAuth.
- Se você precisar fazer login em um aplicativo Node.js, envie o token de acesso OAuth e o segredo OAuth para o aplicativo Node.js.
- Depois que um usuário fizer login no Twitter, troque o token de acesso OAuth e o segredo OAuth por uma credencial do Firebase:
var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
- Autentique-se com o Firebase usando a credencial do Firebase:
import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
// Sign in with the credential from the Facebook user.
const auth = getAuth();
signInWithCredential(auth, credential)
.then((result) => {
// Signed in
const credential = FacebookAuthProvider.credentialFromResult(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 = FacebookAuthProvider.credentialFromError(error);
// ...
});// Sign in with the credential from the Facebook user.
firebase.auth().signInWithCredential(credential)
.then((result) => {
// Signed in
var credential = result.credential;
// ...
})
.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;
// ...
});
Autenticar com Firebase em uma extensão do Chrome
Se você estiver criando um aplicativo de extensão do Chrome, consulte o guia Documentos fora da tela .
Personalizando o domínio de redirecionamento para login no Twitter
Na criação do projeto, o Firebase provisionará um subdomínio exclusivo para o seu projeto: https://my-app-12345.firebaseapp.com
.
Isso também será usado como mecanismo de redirecionamento para login do OAuth. Esse domínio precisaria ser permitido para todos os provedores OAuth suportados. No entanto, isso significa que os usuários podem ver esse domínio ao fazer login no Twitter antes de redirecionar de volta para o aplicativo: Continue para: https://my-app-12345.firebaseapp.com .
Para evitar a exibição do seu subdomínio, você pode configurar um domínio personalizado com Firebase Hosting:
- Siga as etapas 1 a 3 em Configure seu domínio para hospedagem . Quando você verifica a propriedade do seu domínio, a Hosting fornece um certificado SSL para o seu domínio personalizado.
- Adicione seu domínio personalizado à lista de domínios autorizados no console do Firebase :
auth.custom.domain.com
. - No console do desenvolvedor do Twitter ou na página de configuração do OAuth, coloque na lista de permissões o URL da página de redirecionamento, que estará acessível em seu domínio personalizado:
https://auth.custom.domain.com/__/auth/handler
. - Ao inicializar a biblioteca JavaScript, especifique seu domínio personalizado com o campo
authDomain
:var config = {
apiKey: '...',
// Changed from 'my-app-12345.firebaseapp.com'.
authDomain: 'auth.custom.domain.com',
databaseURL: 'https://my-app-12345.firebaseio.com',
projectId: 'my-app-12345',
storageBucket: 'my-app-12345.appspot.com',
messagingSenderId: '1234567890'
};
firebase.initializeApp(config);
Próximos passos
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais (ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação) com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.
Em seus aplicativos, a maneira recomendada de saber o status de autenticação do seu usuário é definir um observador no objeto
Auth
. Você pode então obter as informações básicas do perfil do usuário no objetoUser
. Consulte Gerenciar usuários .Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado na variável
auth
e usá-lo para controlar quais dados um usuário pode acessar.
Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.
Para desconectar um usuário, chame signOut
:
import { getAuth, signOut } from "firebase/auth";
const auth = getAuth();
signOut(auth).then(() => {
// Sign-out successful.
}).catch((error) => {
// An error happened.
});
firebase.auth().signOut().then(() => {
// Sign-out successful.
}).catch((error) => {
// An error happened.
});
Você pode permitir que seus usuários se autentiquem no Firebase usando suas contas do Twitter integrando a autenticação do Twitter ao seu aplicativo. Você pode integrar a autenticação do Twitter usando o SDK do Firebase para realizar o fluxo de login ou executando o fluxo OAuth do Twitter manualmente e passando o token de acesso e o segredo resultantes para o Firebase.
Antes de você começar
- Adicione o Firebase ao seu projeto JavaScript .
- No console do Firebase , abra a seção Auth .
- Na guia Método de login , habilite o provedor do Twitter .
- Adicione a chave de API e o segredo de API do console do desenvolvedor desse provedor à configuração do provedor:
- Registre seu aplicativo como um aplicativo de desenvolvedor no Twitter e obtenha a chave da API OAuth e o segredo da API do seu aplicativo.
- Certifique-se de que seu URI de redirecionamento do Firebase OAuth (por exemplo,
my-app-12345.firebaseapp.com/__/auth/handler
) esteja definido como seu URL de retorno de chamada de autorização na página de configurações do seu aplicativo na configuração do seu aplicativo do Twitter .
- Clique em Salvar .
Lidar com o fluxo de login com o SDK do Firebase
Se você estiver criando um aplicativo da Web, a maneira mais fácil de autenticar seus usuários no Firebase usando suas contas do Twitter é gerenciar o fluxo de login com o SDK JavaScript do Firebase. (Se quiser autenticar um usuário no Node.js ou em outro ambiente que não seja de navegador, você deverá manipular o fluxo de login manualmente.)
Para lidar com o fluxo de login com o SDK JavaScript do Firebase, siga estas etapas:
- Crie uma instância do objeto provedor do Twitter:
import { TwitterAuthProvider } from "firebase/auth";
const provider = new TwitterAuthProvider();var provider = new firebase.auth.TwitterAuthProvider();
- Opcional : para localizar o fluxo OAuth do provedor para o idioma preferencial do usuário sem passar explicitamente os parâmetros OAuth personalizados relevantes, atualize o código do idioma na instância do Auth antes de iniciar o fluxo OAuth. Por exemplo:
import { getAuth } from "firebase/auth";
const auth = getAuth();
auth.languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// auth.useDeviceLanguage();firebase.auth().languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage(); - Opcional : Especifique parâmetros adicionais do provedor OAuth customizado que você deseja enviar com a solicitação OAuth. Para adicionar um parâmetro personalizado, chame
setCustomParameters
no provedor inicializado com um objeto contendo a chave conforme especificado na documentação do provedor OAuth e o valor correspondente. Por exemplo: Parâmetros OAuth obrigatórios reservados não são permitidos e serão ignorados. Consulte a referência do provedor de autenticação para obter mais detalhes.provider.setCustomParameters({
'lang': 'es'
});provider.setCustomParameters({
'lang': 'es'
}); - Autentique-se com o Firebase usando o objeto do provedor do Twitter. Você pode solicitar que seus usuários façam login com suas contas do Twitter abrindo uma janela pop-up ou redirecionando para a página de login. O método de redirecionamento é preferido em dispositivos móveis.
- Para fazer login com uma janela pop-up, chame
signInWithPopup
: Observe também que você pode recuperar o token OAuth do provedor do Twitter, que pode ser usado para buscar dados adicionais usando as APIs do Twitter.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);
// ...
});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;
// ...
});É aqui também que você pode detectar e tratar erros. Para obter uma lista de códigos de erro, consulte os documentos de referência de autenticação .
- Para fazer login redirecionando para a página de login, chame
signInWithRedirect
: siga as práticas recomendadas ao usar `signInWithRedirect`. Em seguida, você também pode recuperar o token OAuth do provedor do Twitter chamandoimport { getAuth, signInWithRedirect } from "firebase/auth";
const auth = getAuth();
signInWithRedirect(auth, provider);firebase.auth().signInWithRedirect(provider);
getRedirectResult
quando sua página for carregada: É aqui também que você pode detectar e tratar erros. Para obter uma lista de códigos de erro, consulte os documentos de referência de autenticação .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);
// ...
});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;
// ...
});
- Para fazer login com uma janela pop-up, chame
Tratamento de erros de conta existente com credenciais diferentes
Se você ativou a configuração Uma conta por endereço de e-mail no console do Firebase , quando um usuário tenta fazer login em um provedor (como o Twitter) com um e-mail que já existe para o provedor de outro usuário do Firebase (como o Google), o erro auth/account-exists-with-different-credential
é lançada junto com um objeto AuthCredential
(token e segredo oauth do Twitter). Para concluir o login no provedor pretendido, o usuário deve primeiro fazer login no provedor existente (Google) e, em seguida, vincular-se ao AuthCredential
anterior (token e segredo oauth do Twitter).
Modo pop-up
Se você usar signInWithPopup
, poderá lidar com erros auth/account-exists-with-different-credential
com código como o exemplo a seguir:
import {
getAuth,
linkWithCredential,
signInWithPopup,
TwitterAuthProvider,
} from "firebase/auth";
try {
// Step 1: User tries to sign in using Twitter.
let result = await signInWithPopup(getAuth(), new TwitterAuthProvider());
} catch (error) {
// Step 2: User's email already exists.
if (error.code === "auth/account-exists-with-different-credential") {
// The pending Twitter credential.
let pendingCred = error.credential;
// Step 3: Save the pending credential in temporary storage,
// Step 4: Let the user know that they already have an account
// but with a different provider, and let them choose another
// sign-in method.
}
}
// ...
try {
// Step 5: Sign the user in using their chosen method.
let result = await signInWithPopup(getAuth(), userSelectedProvider);
// Step 6: Link to the Twitter credential.
// TODO: implement `retrievePendingCred` for your app.
let pendingCred = retrievePendingCred();
if (pendingCred !== null) {
// As you have access to the pending credential, you can directly call the
// link method.
let user = await linkWithCredential(result.user, pendingCred);
}
// Step 7: Continue to app.
} catch (error) {
// ...
}
Modo de redirecionamento
Este erro é tratado de maneira semelhante no modo de redirecionamento, com a diferença de que a credencial pendente deve ser armazenada em cache entre os redirecionamentos de página (por exemplo, usando armazenamento de sessão).
Lidar com o fluxo de login manualmente
Você também pode autenticar com o Firebase usando uma conta do Twitter gerenciando o fluxo de login chamando os endpoints OAuth do Twitter:
- Integre a autenticação do Twitter ao seu aplicativo seguindo a documentação do desenvolvedor . Ao final do fluxo de login do Twitter, você receberá um token de acesso OAuth e um segredo OAuth.
- Se você precisar fazer login em um aplicativo Node.js, envie o token de acesso OAuth e o segredo OAuth para o aplicativo Node.js.
- Depois que um usuário fizer login no Twitter, troque o token de acesso OAuth e o segredo OAuth por uma credencial do Firebase:
var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
- Autentique-se com o Firebase usando a credencial do Firebase:
import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
// Sign in with the credential from the Facebook user.
const auth = getAuth();
signInWithCredential(auth, credential)
.then((result) => {
// Signed in
const credential = FacebookAuthProvider.credentialFromResult(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 = FacebookAuthProvider.credentialFromError(error);
// ...
});// Sign in with the credential from the Facebook user.
firebase.auth().signInWithCredential(credential)
.then((result) => {
// Signed in
var credential = result.credential;
// ...
})
.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;
// ...
});
Autenticar com Firebase em uma extensão do Chrome
Se você estiver criando um aplicativo de extensão do Chrome, consulte o guia Documentos fora da tela .
Personalizando o domínio de redirecionamento para login no Twitter
Na criação do projeto, o Firebase provisionará um subdomínio exclusivo para o seu projeto: https://my-app-12345.firebaseapp.com
.
Isso também será usado como mecanismo de redirecionamento para login do OAuth. Esse domínio precisaria ser permitido para todos os provedores OAuth suportados. No entanto, isso significa que os usuários podem ver esse domínio ao fazer login no Twitter antes de redirecionar de volta para o aplicativo: Continue para: https://my-app-12345.firebaseapp.com .
Para evitar a exibição do seu subdomínio, você pode configurar um domínio personalizado com Firebase Hosting:
- Siga as etapas 1 a 3 em Configure seu domínio para hospedagem . Quando você verifica a propriedade do seu domínio, a Hosting fornece um certificado SSL para o seu domínio personalizado.
- Adicione seu domínio personalizado à lista de domínios autorizados no console do Firebase :
auth.custom.domain.com
. - No console do desenvolvedor do Twitter ou na página de configuração do OAuth, coloque na lista de permissões o URL da página de redirecionamento, que estará acessível em seu domínio personalizado:
https://auth.custom.domain.com/__/auth/handler
. - Ao inicializar a biblioteca JavaScript, especifique seu domínio personalizado com o campo
authDomain
:var config = {
apiKey: '...',
// Changed from 'my-app-12345.firebaseapp.com'.
authDomain: 'auth.custom.domain.com',
databaseURL: 'https://my-app-12345.firebaseio.com',
projectId: 'my-app-12345',
storageBucket: 'my-app-12345.appspot.com',
messagingSenderId: '1234567890'
};
firebase.initializeApp(config);
Próximos passos
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais (ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação) com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.
Em seus aplicativos, a maneira recomendada de saber o status de autenticação do seu usuário é definir um observador no objeto
Auth
. Você pode então obter as informações básicas do perfil do usuário no objetoUser
. Consulte Gerenciar usuários .Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado na variável
auth
e usá-lo para controlar quais dados um usuário pode acessar.
Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.
Para desconectar um usuário, chame signOut
:
import { getAuth, signOut } from "firebase/auth";
const auth = getAuth();
signOut(auth).then(() => {
// Sign-out successful.
}).catch((error) => {
// An error happened.
});
firebase.auth().signOut().then(() => {
// Sign-out successful.
}).catch((error) => {
// An error happened.
});
Você pode permitir que seus usuários se autentiquem no Firebase usando suas contas do Twitter integrando a autenticação do Twitter ao seu aplicativo. Você pode integrar a autenticação do Twitter usando o SDK do Firebase para realizar o fluxo de login ou executando o fluxo OAuth do Twitter manualmente e passando o token de acesso e o segredo resultantes para o Firebase.
Antes de você começar
- Adicione o Firebase ao seu projeto JavaScript .
- No console do Firebase , abra a seção Auth .
- Na guia Método de login , habilite o provedor do Twitter .
- Adicione a chave de API e o segredo de API do console do desenvolvedor desse provedor à configuração do provedor:
- Registre seu aplicativo como um aplicativo de desenvolvedor no Twitter e obtenha a chave da API OAuth e o segredo da API do seu aplicativo.
- Certifique-se de que seu URI de redirecionamento do Firebase OAuth (por exemplo,
my-app-12345.firebaseapp.com/__/auth/handler
) esteja definido como seu URL de retorno de chamada de autorização na página de configurações do seu aplicativo na configuração do seu aplicativo do Twitter .
- Clique em Salvar .
Lidar com o fluxo de login com o SDK do Firebase
Se você estiver criando um aplicativo da Web, a maneira mais fácil de autenticar seus usuários no Firebase usando suas contas do Twitter é gerenciar o fluxo de login com o SDK JavaScript do Firebase. (Se quiser autenticar um usuário no Node.js ou em outro ambiente que não seja de navegador, você deverá manipular o fluxo de login manualmente.)
Para lidar com o fluxo de login com o SDK JavaScript do Firebase, siga estas etapas:
- Crie uma instância do objeto provedor do Twitter:
import { TwitterAuthProvider } from "firebase/auth";
const provider = new TwitterAuthProvider();var provider = new firebase.auth.TwitterAuthProvider();
- Opcional : para localizar o fluxo OAuth do provedor para o idioma preferencial do usuário sem passar explicitamente os parâmetros OAuth personalizados relevantes, atualize o código do idioma na instância do Auth antes de iniciar o fluxo OAuth. Por exemplo:
import { getAuth } from "firebase/auth";
const auth = getAuth();
auth.languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// auth.useDeviceLanguage();firebase.auth().languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage(); - Opcional : Especifique parâmetros adicionais do provedor OAuth customizado que você deseja enviar com a solicitação OAuth. Para adicionar um parâmetro personalizado, chame
setCustomParameters
no provedor inicializado com um objeto contendo a chave conforme especificado na documentação do provedor OAuth e o valor correspondente. Por exemplo: Parâmetros OAuth obrigatórios reservados não são permitidos e serão ignorados. Consulte a referência do provedor de autenticação para obter mais detalhes.provider.setCustomParameters({
'lang': 'es'
});provider.setCustomParameters({
'lang': 'es'
}); - Autentique-se com o Firebase usando o objeto do provedor do Twitter. Você pode solicitar que seus usuários façam login com suas contas do Twitter abrindo uma janela pop-up ou redirecionando para a página de login. O método de redirecionamento é preferido em dispositivos móveis.
- Para fazer login com uma janela pop-up, chame
signInWithPopup
: Observe também que você pode recuperar o token OAuth do provedor do Twitter, que pode ser usado para buscar dados adicionais usando as APIs do Twitter.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);
// ...
});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;
// ...
});É aqui também que você pode detectar e tratar erros. Para obter uma lista de códigos de erro, consulte os documentos de referência de autenticação .
- Para fazer login redirecionando para a página de login, chame
signInWithRedirect
: siga as práticas recomendadas ao usar `signInWithRedirect`. Em seguida, você também pode recuperar o token OAuth do provedor do Twitter chamandoimport { getAuth, signInWithRedirect } from "firebase/auth";
const auth = getAuth();
signInWithRedirect(auth, provider);firebase.auth().signInWithRedirect(provider);
getRedirectResult
quando sua página for carregada: É aqui também que você pode detectar e tratar erros. Para obter uma lista de códigos de erro, consulte os documentos de referência de autenticação .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);
// ...
});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;
// ...
});
- Para fazer login com uma janela pop-up, chame
Tratamento de erros de conta existente com credenciais diferentes
Se você ativou a configuração Uma conta por endereço de e-mail no console do Firebase , quando um usuário tenta fazer login em um provedor (como o Twitter) com um e-mail que já existe para o provedor de outro usuário do Firebase (como o Google), o erro auth/account-exists-with-different-credential
é lançada junto com um objeto AuthCredential
(token e segredo oauth do Twitter). Para concluir o login no provedor pretendido, o usuário deve primeiro fazer login no provedor existente (Google) e, em seguida, vincular-se ao antigo AuthCredential
(token e segredo oauth do Twitter).
Modo pop-up
Se você usar signInWithPopup
, poderá lidar com erros auth/account-exists-with-different-credential
com código como o exemplo a seguir:
import {
getAuth,
linkWithCredential,
signInWithPopup,
TwitterAuthProvider,
} from "firebase/auth";
try {
// Step 1: User tries to sign in using Twitter.
let result = await signInWithPopup(getAuth(), new TwitterAuthProvider());
} catch (error) {
// Step 2: User's email already exists.
if (error.code === "auth/account-exists-with-different-credential") {
// The pending Twitter credential.
let pendingCred = error.credential;
// Step 3: Save the pending credential in temporary storage,
// Step 4: Let the user know that they already have an account
// but with a different provider, and let them choose another
// sign-in method.
}
}
// ...
try {
// Step 5: Sign the user in using their chosen method.
let result = await signInWithPopup(getAuth(), userSelectedProvider);
// Step 6: Link to the Twitter credential.
// TODO: implement `retrievePendingCred` for your app.
let pendingCred = retrievePendingCred();
if (pendingCred !== null) {
// As you have access to the pending credential, you can directly call the
// link method.
let user = await linkWithCredential(result.user, pendingCred);
}
// Step 7: Continue to app.
} catch (error) {
// ...
}
Modo de redirecionamento
Este erro é tratado de maneira semelhante no modo de redirecionamento, com a diferença de que a credencial pendente deve ser armazenada em cache entre os redirecionamentos de página (por exemplo, usando armazenamento de sessão).
Lidar com o fluxo de login manualmente
Você também pode autenticar com o Firebase usando uma conta do Twitter gerenciando o fluxo de login chamando os endpoints OAuth do Twitter:
- Integre a autenticação do Twitter ao seu aplicativo seguindo a documentação do desenvolvedor . Ao final do fluxo de login do Twitter, você receberá um token de acesso OAuth e um segredo OAuth.
- Se você precisar fazer login em um aplicativo Node.js, envie o token de acesso OAuth e o segredo OAuth para o aplicativo Node.js.
- Depois que um usuário fizer login no Twitter, troque o token de acesso OAuth e o segredo OAuth por uma credencial do Firebase:
var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
- Autentique-se com o Firebase usando a credencial do Firebase:
import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
// Sign in with the credential from the Facebook user.
const auth = getAuth();
signInWithCredential(auth, credential)
.then((result) => {
// Signed in
const credential = FacebookAuthProvider.credentialFromResult(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 = FacebookAuthProvider.credentialFromError(error);
// ...
});// Sign in with the credential from the Facebook user.
firebase.auth().signInWithCredential(credential)
.then((result) => {
// Signed in
var credential = result.credential;
// ...
})
.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;
// ...
});
Autenticar com Firebase em uma extensão do Chrome
Se você estiver criando um aplicativo de extensão do Chrome, consulte o guia Documentos fora da tela .
Personalizando o domínio de redirecionamento para login no Twitter
Na criação do projeto, o Firebase provisionará um subdomínio exclusivo para o seu projeto: https://my-app-12345.firebaseapp.com
.
Isso também será usado como mecanismo de redirecionamento para login do OAuth. Esse domínio precisaria ser permitido para todos os provedores OAuth suportados. No entanto, isso significa que os usuários podem ver esse domínio ao fazer login no Twitter antes de redirecionar de volta para o aplicativo: Continue para: https://my-app-12345.firebaseapp.com .
Para evitar a exibição do seu subdomínio, você pode configurar um domínio personalizado com Firebase Hosting:
- Siga as etapas 1 a 3 em Configure seu domínio para hospedagem . Quando você verifica a propriedade do seu domínio, a Hosting fornece um certificado SSL para o seu domínio personalizado.
- Adicione seu domínio personalizado à lista de domínios autorizados no console do Firebase :
auth.custom.domain.com
. - No console do desenvolvedor do Twitter ou na página de configuração do OAuth, coloque na lista de permissões o URL da página de redirecionamento, que estará acessível em seu domínio personalizado:
https://auth.custom.domain.com/__/auth/handler
. - Ao inicializar a biblioteca JavaScript, especifique seu domínio personalizado com o campo
authDomain
:var config = {
apiKey: '...',
// Changed from 'my-app-12345.firebaseapp.com'.
authDomain: 'auth.custom.domain.com',
databaseURL: 'https://my-app-12345.firebaseio.com',
projectId: 'my-app-12345',
storageBucket: 'my-app-12345.appspot.com',
messagingSenderId: '1234567890'
};
firebase.initializeApp(config);
Próximos passos
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais (ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação) com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.
Em seus aplicativos, a maneira recomendada de saber o status de autenticação do seu usuário é definir um observador no objeto
Auth
. Você pode então obter as informações básicas do perfil do usuário no objetoUser
. Consulte Gerenciar usuários .Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado na variável
auth
e usá-lo para controlar quais dados um usuário pode acessar.
Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.
Para desconectar um usuário, chame signOut
:
import { getAuth, signOut } from "firebase/auth";
const auth = getAuth();
signOut(auth).then(() => {
// Sign-out successful.
}).catch((error) => {
// An error happened.
});
firebase.auth().signOut().then(() => {
// Sign-out successful.
}).catch((error) => {
// An error happened.
});