-
-
Save Albejr/a38cdeac247ef177986c99629680afb4 to your computer and use it in GitHub Desktop.
catchError(err => { | |
const errorCode = err.code; | |
let errorMessage = this.VerifyErroCode(errorCode); | |
if (errorMessage == null) { | |
errorMessage = err.message; | |
} | |
console.log(errorMessage); | |
}) | |
VerifyErroCode(errorCode: string): string { | |
// fonte: https://firebase.google.com/docs/reference/js/firebase.auth.Auth | |
// fonte: https://firebase.google.com/docs/auth/admin/errors?hl=pt-br | |
switch (errorCode) { | |
case 'auth/app-deleted': | |
return 'O banco de dados não foi localizado.'; | |
case 'auth/expired-action-code': | |
return 'O código da ação o ou link expirou.'; | |
case 'auth/invalid-action-code': | |
return 'O código da ação é inválido. Isso pode acontecer se o código estiver malformado ou já tiver sido usado.'; | |
case 'auth/user-disabled': | |
return 'O usuário correspondente à credencial fornecida foi desativado.'; | |
case 'auth/user-not-found': | |
return 'O usuário não correponde à nenhuma credencial.'; | |
case 'auth/weak-password': | |
return 'A senha é muito fraca.'; | |
case 'auth/email-already-in-use': | |
return 'Já existi uma conta com o endereço de email fornecido.'; | |
case 'auth/invalid-email': | |
return 'O endereço de e-mail não é válido.'; | |
case 'auth/operation-not-allowed': | |
return 'O tipo de conta correspondente à esta credencial, ainda não encontra-se ativada.'; | |
case 'auth/account-exists-with-different-credential': | |
return 'E-mail já associado a outra conta.'; | |
case 'auth/auth-domain-config-required': | |
return 'A configuração para autenticação não foi fornecida.'; | |
case 'auth/credential-already-in-use': | |
return 'Já existe uma conta para esta credencial.'; | |
case 'auth/operation-not-supported-in-this-environment': | |
return 'Esta operação não é suportada no ambiente que está sendo executada. Verifique se deve ser http ou https.'; | |
case 'auth/timeout': | |
return 'Excedido o tempo de resposta. O domínio pode não estar autorizado para realizar operações.'; | |
case 'auth/missing-android-pkg-name': | |
return 'Deve ser fornecido um nome de pacote para instalação do aplicativo Android.'; | |
case 'auth/missing-continue-uri': | |
return 'A próxima URL deve ser fornecida na solicitação.'; | |
case 'auth/missing-ios-bundle-id': | |
return 'Deve ser fornecido um nome de pacote para instalação do aplicativo iOS.'; | |
case 'auth/invalid-continue-uri': | |
return 'A próxima URL fornecida na solicitação é inválida.'; | |
case 'auth/unauthorized-continue-uri': | |
return 'O domínio da próxima URL não está na lista de autorizações.'; | |
case 'auth/invalid-dynamic-link-domain': | |
return 'O domínio de link dinâmico fornecido, não está autorizado ou configurado no projeto atual.'; | |
case 'auth/argument-error': | |
return 'Verifique a configuração de link para o aplicativo.'; | |
case 'auth/invalid-persistence-type': | |
return 'O tipo especificado para a persistência dos dados é inválido.'; | |
case 'auth/unsupported-persistence-type': | |
return 'O ambiente atual não suportar o tipo especificado para persistência dos dados.'; | |
case 'auth/invalid-credential': | |
return 'A credencial expirou ou está mal formada.'; | |
case 'auth/wrong-password': | |
return 'Senha incorreta.'; | |
case 'auth/invalid-verification-code': | |
return 'O código de verificação da credencial não é válido.'; | |
case 'auth/invalid-verification-id': | |
return 'O ID de verificação da credencial não é válido.'; | |
case 'auth/custom-token-mismatch': | |
return 'O token está diferente do padrão solicitado.'; | |
case 'auth/invalid-custom-token': | |
return 'O token fornecido não é válido.'; | |
case 'auth/captcha-check-failed': | |
return 'O token de resposta do reCAPTCHA não é válido, expirou ou o domínio não é permitido.'; | |
case 'auth/invalid-phone-number': | |
return 'O número de telefone está em um formato inválido (padrão E.164).'; | |
case 'auth/missing-phone-number': | |
return 'O número de telefone é requerido.'; | |
case 'auth/quota-exceeded': | |
return 'A cota de SMS foi excedida.'; | |
case 'auth/cancelled-popup-request': | |
return 'Somente uma solicitação de janela pop-up é permitida de uma só vez.'; | |
case 'auth/popup-blocked': | |
return 'A janela pop-up foi bloqueado pelo navegador.'; | |
case 'auth/popup-closed-by-user': | |
return 'A janela pop-up foi fechada pelo usuário sem concluir o login no provedor.'; | |
case 'auth/unauthorized-domain': | |
return 'O domínio do aplicativo não está autorizado para realizar operações.'; | |
case 'auth/invalid-user-token': | |
return 'O usuário atual não foi identificado.'; | |
case 'auth/user-token-expired': | |
return 'O token do usuário atual expirou.'; | |
case 'auth/null-user': | |
return 'O usuário atual é nulo.'; | |
case 'auth/app-not-authorized': | |
return 'Aplicação não autorizada para autenticar com a chave informada.'; | |
case 'auth/invalid-api-key': | |
return 'A chave da API fornecida é inválida.'; | |
case 'auth/network-request-failed': | |
return 'Falha de conexão com a rede.'; | |
case 'auth/requires-recent-login': | |
return 'O último horário de acesso do usuário não atende ao limite de segurança.'; | |
case 'auth/too-many-requests': | |
return 'As solicitações foram bloqueadas devido a atividades incomuns. Tente novamente depois que algum tempo.'; | |
case 'auth/web-storage-unsupported': | |
return 'O navegador não suporta armazenamento ou se o usuário desativou este recurso.'; | |
case 'auth/invalid-claims': | |
return 'Os atributos de cadastro personalizado são inválidos.'; | |
case 'auth/claims-too-large': | |
return 'O tamanho da requisição excede o tamanho máximo permitido de 1 Megabyte.'; | |
case 'auth/id-token-expired': | |
return 'O token informado expirou.'; | |
case 'auth/id-token-revoked': | |
return 'O token informado perdeu a validade.'; | |
case 'auth/invalid-argument': | |
return 'Um argumento inválido foi fornecido a um método.'; | |
case 'auth/invalid-creation-time': | |
return 'O horário da criação precisa ser uma data UTC válida.'; | |
case 'auth/invalid-disabled-field': | |
return 'A propriedade para usuário desabilitado é inválida.'; | |
case 'auth/invalid-display-name': | |
return 'O nome do usuário é inválido.'; | |
case 'auth/invalid-email-verified': | |
return 'O e-mail é inválido.'; | |
case 'auth/invalid-hash-algorithm': | |
return 'O algoritmo de HASH não é uma criptografia compatível.'; | |
case 'auth/invalid-hash-block-size': | |
return 'O tamanho do bloco de HASH não é válido.'; | |
case 'auth/invalid-hash-derived-key-length': | |
return 'O tamanho da chave derivada do HASH não é válido.'; | |
case 'auth/invalid-hash-key': | |
return 'A chave de HASH precisa ter um buffer de byte válido.'; | |
case 'auth/invalid-hash-memory-cost': | |
return 'O custo da memória HASH não é válido.'; | |
case 'auth/invalid-hash-parallelization': | |
return 'O carregamento em paralelo do HASH não é válido.'; | |
case 'auth/invalid-hash-rounds': | |
return 'O arredondamento de HASH não é válido.'; | |
case 'auth/invalid-hash-salt-separator': | |
return 'O campo do separador de SALT do algoritmo de geração de HASH precisa ser um buffer de byte válido.'; | |
case 'auth/invalid-id-token': | |
return 'O código do token informado não é válido.'; | |
case 'auth/invalid-last-sign-in-time': | |
return 'O último horário de login precisa ser uma data UTC válida.'; | |
case 'auth/invalid-page-token': | |
return 'A próxima URL fornecida na solicitação é inválida.'; | |
case 'auth/invalid-password': | |
return 'A senha é inválida, precisa ter pelo menos 6 caracteres.'; | |
case 'auth/invalid-password-hash': | |
return 'O HASH da senha não é válida.'; | |
case 'auth/invalid-password-salt': | |
return 'O SALT da senha não é válido.'; | |
case 'auth/invalid-photo-url': | |
return 'A URL da foto de usuário é inválido.'; | |
case 'auth/invalid-provider-id': | |
return 'O identificador de provedor não é compatível.'; | |
case 'auth/invalid-session-cookie-duration': | |
return 'A duração do COOKIE da sessão precisa ser um número válido em milissegundos, entre 5 minutos e 2 semanas.'; | |
case 'auth/invalid-uid': | |
return 'O identificador fornecido deve ter no máximo 128 caracteres.'; | |
case 'auth/invalid-user-import': | |
return 'O registro do usuário a ser importado não é válido.'; | |
case 'auth/invalid-provider-data': | |
return 'O provedor de dados não é válido.'; | |
case 'auth/maximum-user-count-exceeded': | |
return 'O número máximo permitido de usuários a serem importados foi excedido.'; | |
case 'auth/missing-hash-algorithm': | |
return 'É necessário fornecer o algoritmo de geração de HASH e seus parâmetros para importar usuários.'; | |
case 'auth/missing-uid': | |
return 'Um identificador é necessário para a operação atual.'; | |
case 'auth/reserved-claims': | |
return 'Uma ou mais propriedades personalizadas fornecidas usaram palavras reservadas.'; | |
case 'auth/session-cookie-revoked': | |
return 'O COOKIE da sessão perdeu a validade.'; | |
case 'auth/uid-alread-exists': | |
return 'O indentificador fornecido já está em uso.'; | |
case 'auth/email-already-exists': | |
return 'O e-mail fornecido já está em uso.'; | |
case 'auth/phone-number-already-exists': | |
return 'O telefone fornecido já está em uso.'; | |
case 'auth/project-not-found': | |
return 'Nenhum projeto foi encontrado.'; | |
case 'auth/insufficient-permission': | |
return 'A credencial utilizada não tem permissão para acessar o recurso solicitado.'; | |
case 'auth/internal-error': | |
return 'O servidor de autenticação encontrou um erro inesperado ao tentar processar a solicitação.'; | |
default: | |
return null; | |
} | |
} |
Onde eu incluo esse arquivo pra traduzir as mensagens?
Valeu
Fala @marquimneto, cara, onde você quiser. O lance é o seguinte, perceba que essas mensagens são compostars por um hashmap, ou seja, umm objeto { chave: valor }. onde a chave é o código de erro e o valor a mensagem do mesmo.
O Firebase sempre retorna um código de erro, então pra mostrar a mensagem traduzida, basta você pegar o código de erro que retornou e colocar no lugar daa chave, como eu mostrei ali em cima mesmo...
.pipe(
catchError(({ code, message }) => throwError(!!errors[code] ? errors[code] : message)))
@marquimneto, esta não é uma tradução automática.
Após adicionar o arquivo ao seu projeto, você deverá fazer o "import" para referenciando-o.
Estava demorando alguém criar uma biblioteca para isso:
(Apesar de que, já deveria vir nativo do Firebase)
https://github.com/JebBarbas/firebase-error-translator
Código do erro Etapas de resolução e descrição - Direto do site do Firebase -
https://firebase.google.com/docs/auth/admin/errors
static const Map<String?, String> errorsMap = {
null: 'Erro desconhecido.',
'auth/claims-too-large' : 'O payload de declarações fornecido para setCustomUserClaims() excede o tamanho máximo permitido de 1.000 bytes.'
'auth/email-already-exists' : 'O e-mail fornecido já está em uso por outro usuário. Cada usuário precisa ter um e-mail exclusivo.'
'auth/id-token-expired' : 'O token de código do Firebase provisionado expirou.'
'auth/id-token-revoked' : 'O token de ID do Firebase foi revogado.'
'auth/insufficient-permission' : 'A credencial usada para inicializar o SDK Admin não tem permissão para acessar o recurso solicitado do Authentication. Consulte Configurar um projeto do Firebase para ver a documentação sobre como gerar uma credencial com as permissões apropriadas e usá-la na autenticação dos SDKs Admin.'
'auth/internal-error' : 'O servidor do Authentication encontrou um erro inesperado ao tentar processar a solicitação. A mensagem de erro incluirá a resposta do servidor de autenticação com informações adicionais. Se o erro persistir, informe o problema ao nosso canal de suporte de Relatório do bug.'
'auth/invalid-argument' : 'Um argumento inválido foi fornecido a um método do Authentication. A mensagem de erro precisa conter informações adicionais.'
'auth/invalid-claims' : 'Os atributos de declaração personalizados fornecidos para setCustomUserClaims() são inválidos.'
'auth/invalid-continue-uri' : 'O URL de confirmação precisa ser uma string de URL válida.'
'auth/invalid-creation-time' : 'O horário da criação precisa ser um string de data UTC válido.'
'auth/invalid-credential' : 'A credencial usada para autenticar os SDKs Admin não pode ser usada para executar a ação desejada. Determinados métodos de autenticação, como createCustomToken() e verifyIdToken(), requerem que o SDK seja inicializado com uma credencial de certificado em oposição a um token de atualização ou uma credencial padrão do aplicativo. Consulte Inicializar o SDK para ver a documentação sobre como autenticar os Admin SDKs com uma credencial de certificado.'
'auth/invalid-disabled-field' : 'O valor fornecido para a propriedade do usuário disabled é inválido. Precisa ser um valor booleano.'
'auth/invalid-display-name' : 'O valor fornecido para a propriedade do usuário displayName é inválido. Precisa ser uma string não vazia.'
'auth/invalid-dynamic-link-domain' : 'O domínio de link dinâmico fornecido não está configurado ou autorizado para o projeto atual.'
'auth/invalid-email' : 'O valor fornecido para a propriedade do usuário email é inválido. Precisa ser um endereço de e-mail de string.'
'auth/invalid-email-verified' : 'O valor fornecido para a propriedade do usuário emailVerified é inválido. Precisa ser um valor booleano.'
'auth/invalid-hash-algorithm' : 'O algoritmo de hash precisa corresponder a uma das strings na lista de algoritmos compatíveis.'
'auth/invalid-hash-block-size' : 'O tamanho do bloco de hash precisa ser um número válido.'
'auth/invalid-hash-derived-key-length' : 'O tamanho da chave derivada do hash precisa ser um número válido.'
'auth/invalid-hash-key' : 'A chave de hash precisa ter um buffer de byte válido.'
'auth/invalid-hash-memory-cost' : 'O custo da memória hash precisa ser um número válido.'
'auth/invalid-hash-parallelization' : 'O carregamento em paralelo do hash precisa ser um número válido.'
'auth/invalid-hash-rounds' : 'O arredondamento de hash precisa ser um número válido.'
'auth/invalid-hash-salt-separator' : 'O campo do separador de "salt" do algoritmo de geração de hash precisa ser um buffer de byte válido.'
'auth/invalid-id-token' : 'O token de código informado não é um token de código do Firebase válido.'
'auth/invalid-last-sign-in-time' : 'O último horário de login precisa ser um string de data UTC válido.'
'auth/invalid-page-token' : 'O token de próxima página fornecido em listUsers() é inválido. Precisa ser uma string não vazia válida.'
'auth/invalid-password' : 'O valor fornecido para a propriedade do usuário password é inválido. Precisa ser uma string com pelo menos seis caracteres.'
'auth/invalid-password-hash' : 'O hash da senha precisa ser um buffer de byte válido.'
'auth/invalid-password-salt' : 'O "salt" da senha precisa ser um buffer de byte válido'
'auth/invalid-phone-number' : 'O valor fornecido para phoneNumber é inválido. Ele precisa ser uma string de identificador compatível com o padrão E.164 não vazio.'
'auth/invalid-photo-url' : 'O valor fornecido para a propriedade do usuário photoURL é inválido. Precisa ser um URL de string.'
'auth/invalid-provider-data' : 'O providerData precisa ser uma matriz válida de objetos UserInfo.'
'auth/invalid-provider-id' : 'O providerId precisa ser um string de identificador de provedor compatível válido.'
'auth/invalid-oauth-responsetype' : 'Apenas um responseType do OAuth deve ser definido como verdadeiro.'
'auth/invalid-session-cookie-duration' : 'A duração do cookie da sessão precisa ser um número válido em milissegundos entre 5 minutos e 2 semanas.'
'auth/invalid-uid' : 'O uid fornecido precisa ser uma string não vazia com no máximo 128 caracteres.'
'auth/invalid-user-import' : 'O registro do usuário a ser importado é inválido.'
'auth/maximum-user-count-exceeded' : 'O número máximo permitido de usuários a serem importados foi excedido.'
'auth/missing-android-pkg-name' : 'Um nome de pacote Android precisa ser fornecido para a instalação do app Android.'
'auth/missing-continue-uri' : 'Um URL de confirmação válido precisa ser fornecido na solicitação.'
'auth/missing-hash-algorithm' : 'É necessário fornecer o algoritmo de geração de hash e seus parâmetros para importar usuários com hashes de senha.'
'auth/missing-ios-bundle-id' : 'A solicitação está sem o ID do pacote do iOS.'
'auth/missing-uid' : 'Um identificador uid é necessário para a operação atual.'
'auth/missing-oauth-client-secret' : 'A chave secreta do cliente de configuração do OAuth é necessária para ativar o fluxo de código do OIDC.'
'auth/operation-not-allowed' : 'O provedor de login fornecido está desativado para o projeto do Firebase. Ative-o na seção Método de login do Console do Firebase.'
'auth/phone-number-already-exists' : 'O phoneNumber fornecido já está sendo usado por um usuário existente. É necessário que cada usuário tenha um phoneNumber exclusivo.'
'auth/project-not-found' : 'Nenhum projeto do Firebase foi encontrado com a credencial usada para inicializar os Admin SDKs. Consulte Configurar um projeto do Firebase para ver a documentação sobre como gerar uma credencial para seu projeto e usá-la na autenticação dos Admin SDKs.'
'auth/reserved-claims' : 'Uma ou mais declarações de usuário personalizadas fornecidas para setCustomUserClaims() são reservadas. Por exemplo, não use as declarações específicas do OIDC, como sub, iat, iss, exp, aud, auth_time etc., como chaves para declarações personalizadas.'
'auth/session-cookie-expired' : 'O cookie da sessão do Firebase fornecido expirou.'
'auth/session-cookie-revoked' : 'O cookie da sessão do Firebase foi revogado.'
'auth/uid-already-exists' : 'O uid fornecido já está sendo usado por um usuário existente. É necessário que cada usuário tenha um uid exclusivo.'
'auth/unauthorized-continue-uri' : 'O domínio da URL de confirmação não está na lista de permissões. Acesse o Console do Firebase para colocar o domínio na lista de permissões.'
'auth/user-not-found' : 'Não há registro de usuário existente correspondente ao identificador fornecido.'
};
Exemplo de uma função utilizando os dados da const Errors:
function loginFirebase(email, senha){
firebase.auth().signInWithEmailAndPassword(email, senha)
.then(result => {
//Faça algo
})
.catch(error => {
console.error(error.code)
alert(`Não foi possível efetuar o login \n Erro: ${errors[error.code]}`)
})
}
Vlw pessoal!!!
Onde eu incluo esse arquivo pra traduzir as mensagens?
Valeu