diff --git a/LANGUAGES.md b/LANGUAGES.md
index e7c44c55..0a0c2389 100644
--- a/LANGUAGES.md
+++ b/LANGUAGES.md
@@ -30,7 +30,7 @@
| lt | Lithuanian |
| no | Norwegian (Bokmal) |
| pl | Polish |
-| pt | Portuguese |
+| pt_br | Portuguese (Brazil) |
| pt_pt | Portuguese (Portugal) |
| ro | Romanian |
| ru | Russian |
diff --git a/README.md b/README.md
index 23740eb6..5ecadccb 100644
--- a/README.md
+++ b/README.md
@@ -68,17 +68,17 @@ Localized versions of the widget are available through the CDN. To use a localiz
localized JS library instead of the default library:
```html
-
-
+
+
```
where `{LANGUAGE_CODE}` is replaced by the code of the language you want. For example, the French
version of the library is available at
-`https://www.gstatic.com/firebasejs/ui/3.5.1/firebase-ui-auth__fr.js`. The list of available
+`https://www.gstatic.com/firebasejs/ui/3.5.2/firebase-ui-auth__fr.js`. The list of available
languages and their respective language codes can be found at [LANGUAGES.md](LANGUAGES.md).
Right-to-left languages also require the right-to-left version of the stylesheet, available at
-`https://www.gstatic.com/firebasejs/ui/3.5.1/firebase-ui-auth-rtl.css`, instead of the default
+`https://www.gstatic.com/firebasejs/ui/3.5.2/firebase-ui-auth-rtl.css`, instead of the default
stylesheet. The supported right-to-left languages are Arabic (ar), Farsi (fa), and Hebrew (iw).
### Option 2: npm Module
diff --git a/changelog.txt b/changelog.txt
index e69de29b..6e5e2396 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -0,0 +1,2 @@
+fixed - Improves the error message when outdated email link is used for email link sign in and `forceSameDevice` is enabled.
+fixed - Fixes the wrong language code for Portuguese (Brazilian).
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index 99b4d8ba..17489495 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -71,9 +71,9 @@ const DEFAULT_LOCALE = 'en';
// The list of all locales that are supported.
const ALL_LOCALES = ['ar-XB', 'ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'en',
'en-GB', 'en-XA', 'es-419', 'es', 'fa', 'fi', 'fil', 'fr', 'hi', 'hr', 'hu',
- 'id', 'it', 'iw', 'ja', 'ko', 'lt', 'lv', 'nl', 'no', 'pl', 'pt-PT', 'pt',
- 'ro', 'ru', 'sk', 'sl', 'sr', 'sv', 'th', 'tr', 'uk', 'vi', 'zh-CN',
- 'zh-TW'];
+ 'id', 'it', 'iw', 'ja', 'ko', 'lt', 'lv', 'nl', 'no', 'pl', 'pt-PT',
+ 'pt-BR', 'ro', 'ru', 'sk', 'sl', 'sr', 'sv', 'th', 'tr', 'uk', 'vi',
+ 'zh-CN', 'zh-TW'];
// Default arguments to pass into Closure Compiler.
const COMPILER_DEFAULT_ARGS = {
diff --git a/javascript/widgets/handler/emaillinksignincallback.js b/javascript/widgets/handler/emaillinksignincallback.js
index fe6d6585..c5288158 100644
--- a/javascript/widgets/handler/emaillinksignincallback.js
+++ b/javascript/widgets/handler/emaillinksignincallback.js
@@ -75,6 +75,7 @@ firebaseui.auth.widget.handler.handleEmailLinkSignInCallback = function(
var forceSameDevice = urlBuilder.getForceSameDevice();
var anonymousUid = urlBuilder.getAnonymousUid();
var providerId = urlBuilder.getProviderId();
+ var isNewDevice = !firebaseui.auth.storage.hasEmailForSignIn(app.getAppId());
var email = opt_email || firebaseui.auth.storage.getEmailForSignIn(
sessionId, app.getAppId());
var pendingCredential = firebaseui.auth.storage.getEncryptedPendingCredential(
@@ -133,7 +134,7 @@ firebaseui.auth.widget.handler.handleEmailLinkSignInCallback = function(
var checkActionCodeAndGetUser = function() {
var anonymousUserPromise = goog.Promise.resolve(null);
- if ((anonymousUid && !email) || (!email && forceSameDevice)) {
+ if ((anonymousUid && isNewDevice) || (isNewDevice && forceSameDevice)) {
// Anonymous user with different device flow or regular sign in flow with
// same device requirement on different device.
anonymousUserPromise = goog.Promise.reject(
@@ -169,15 +170,23 @@ firebaseui.auth.widget.handler.handleEmailLinkSignInCallback = function(
app, component, email, link, credential,
/** @type {?firebase.User} */ (user));
} else {
- component.dispose();
- // On email confirmation, call this handler again with
- // skipCodeCheck set to true.
- firebaseui.auth.widget.handler.handle(
- firebaseui.auth.widget.HandlerName.EMAIL_LINK_CONFIRMATION,
+ if (forceSameDevice) {
+ component.dispose();
+ firebaseui.auth.widget.handler.handle(
+ firebaseui.auth.widget.HandlerName.DIFFERENT_DEVICE_ERROR,
app,
- container,
- link,
- firebaseui.auth.widget.handler.completeEmailConfirmation_);
+ container);
+ } else {
+ component.dispose();
+ // On email confirmation, call this handler again with
+ // skipCodeCheck set to true.
+ firebaseui.auth.widget.handler.handle(
+ firebaseui.auth.widget.HandlerName.EMAIL_LINK_CONFIRMATION,
+ app,
+ container,
+ link,
+ firebaseui.auth.widget.handler.completeEmailConfirmation_);
+ }
}
},
onError));
diff --git a/javascript/widgets/handler/emaillinksignincallback_test.js b/javascript/widgets/handler/emaillinksignincallback_test.js
index 95a640ed..3792b8cb 100644
--- a/javascript/widgets/handler/emaillinksignincallback_test.js
+++ b/javascript/widgets/handler/emaillinksignincallback_test.js
@@ -959,6 +959,66 @@ function testHandleEmailLinkSignInCallback_expiredActionCodeError() {
}
+function testHandleEmailLinkSignInCallback_oldLinkClicked() {
+ // Test when old email link is clicked, code expired error should be
+ // displayed. In this case, the email is stored with new session ID which is
+ // different from the session ID in the old link.
+ var expectedError = {'code': 'auth/expired-action-code'};
+ var email = passwordAccount.getEmail();
+ var link = generateSignInLink('OLD_SESSIONID', null, null, true);
+ setupEmailLinkSignIn('NEW_SESSIONID', email);
+
+ firebaseui.auth.widget.handler.handleEmailLinkSignInCallback(
+ app, container, link);
+ assertBlankPage();
+
+ // Simulate expired error code.
+ var waitForCheckActionCode = testAuth.assertCheckActionCode(
+ ['ACTION_CODE'],
+ null,
+ expectedError);
+ return waitForCheckActionCode.then(function() {
+ delayForBusyIndicatorAndAssertIndicatorShown();
+ return testAuth.process();
+ }).then(function() {
+ assertBusyIndicatorHidden();
+ // Provider sign-in page should be rendered with error in info bar.
+ assertProviderSignInPage();
+ assertInfoBarMessage(
+ firebaseui.auth.widget.handler.common.getErrorMessage(expectedError));
+ });
+}
+
+
+function testHandleEmailLinkSignInCallback_sessionMismatch() {
+ var email = passwordAccount.getEmail();
+ var link = generateSignInLink('NEW_SESSIONID', null, null, true);
+ setupEmailLinkSignIn('OLD_SESSIONID', email);
+
+ firebaseui.auth.widget.handler.handleEmailLinkSignInCallback(
+ app, container, link);
+ assertBlankPage();
+
+ var waitForCheckActionCode = testAuth.assertCheckActionCode(
+ ['ACTION_CODE'],
+ function() {
+ return {
+ 'operation': 'EMAIL_SIGNIN'
+ };
+ });
+ return waitForCheckActionCode.then(function() {
+ delayForBusyIndicatorAndAssertIndicatorShown();
+ return testAuth.process();
+ }).then(function() {
+ assertBusyIndicatorHidden();
+ assertDifferentDeviceErrorPage();
+ // Clicking dismiss button should redirect to the first page.
+ clickSecondaryLink();
+ assertProviderSignInPage();
+ });
+}
+
+
function testHandleEmailLinkSignInCallback_signInError() {
var email = passwordAccount.getEmail();
var link = generateSignInLink('SESSIONID');
diff --git a/package-lock.json b/package-lock.json
index 6f0ef1b0..76125af2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "firebaseui",
- "version": "3.4.1",
+ "version": "3.5.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/translations/iw.xtb b/translations/iw.xtb
index 4a33f542..5d747d8e 100644
--- a/translations/iw.xtb
+++ b/translations/iw.xtb
@@ -145,7 +145,7 @@
מאיוטכניסהאיפוס הסיסמה
-שלח
+שליחהנפאלטוקלאופרטי הכניסה שנבחרו לספק האימות אינם נתמכים.
diff --git a/translations/pt-BR.xtb b/translations/pt-BR.xtb
new file mode 100644
index 00000000..472ffbca
--- /dev/null
+++ b/translations/pt-BR.xtb
@@ -0,0 +1,459 @@
+
+E-mail de login enviado
+Código de verificação inválido
+São Vicente
+O link de email é inválido. Esse problema pode acontecer se o link de e-mail expirou ou já foi usado para fazer login. Reinicie o processo de login.
+Este número de telefone já foi usado muitas vezes
+ui_flow
+Letônia
+Salvar
+Singapura
+Faça login novamente para realizar essa ação
+Filipinas
+Romênia
+Ilhas Geórgia do Sul e Sandwich do Sul
+Ok
+Itália
+Líbano
+Guiana
+Guatemala
+Insira um número de telefone válido.
+Ao tocar em "Verificar", você concorda com nossos Termos de Serviço e a Política de Privacidade. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
+Digite sua senha
+Concluir
+Haiti
+Caso não tenha solicitado a alteração do seu e-mail de login, é possível que outra pessoa esteja tentando acessar sua conta. Altere sua senha agora.
+Ilhas Heard e McDonald
+Seu endereço IP está emitindo muitas solicitações de contas. Tente novamente em alguns minutos.
+Sri Lanka
+Faça login com a sua nova conta
+Chade
+Reenviar o código em
+Bielorrússia
+O endereço de e-mail não corresponde a uma conta existente.
+Talvez você receba um SMS quando tocar em "". Taxas de mensagens e dados podem ser aplicáveis.
+Santa Helena
+Barbados
+Se tocar em "Continuar", você afirma que concorda com os Termos de Serviço
+Armênia
+Bósnia e Herzegovina
+Ilhas Cook
+Código incorreto. Tente novamente.
+Macau
+Olá,
+Excluir conta
+Insira o código de 6 dígitos enviado para
+Siga as instruções enviadas para para recuperar sua senha.
+Hungria
+Suriname
+Estados Unidos
+São Bartolomeu
+Montserrat
+Senhas fortes têm pelo menos 6 caracteres e uma combinação de letras e números
+Termos de Serviço
+Sessão encerrada
+Reino Unido
+Ilhas Cayman
+Moldávia
+Autorize as permissões necessárias para fazer login no aplicativo
+Malauí
+Verificado.
+Insira o número do seu telefone
+GitHub
+Política de Privacidade
+Guam
+Croácia
+Lituânia
+Malta
+Cabo Verde
+Macedônia
+Conectado!
+Convidado
+Gana
+O navegador usado não é compatível com o armazenamento na Web. Tente novamente em outro navegador.
+Ocorreu um problema ao alterar seu e-mail de login.Se você tentar novamente e não conseguir redefini-lo, peça ajuda ao seu administrador.
+Barein
+Irã
+Verificando se você não é um robô...
+Este código não é mais válido.
+Nova Caledônia
+Mônaco
+Seicheles
+Não foi possível fazer o upgrade deste usuário anônimo. A credencial não anônima já está associada a uma conta de usuário diferente.
+Você digitou a senha incorretamente várias vezes. Tente novamente em alguns minutos.
+Segurança
+Sua solicitação para redefinir a senha expirou ou o link já foi usado
+Este código do país não é aceito.
+Verifique se você digitou seu e-mail corretamente.
+Twitter
+Camboja
+Portugal
+Guiana Francesa
+Ilhas Virgens Britânicas
+Dispensar
+Insira um número de telefone válido.
+Este tipo de conta não é compatível com este app
+O código da ação é inválido. Isso pode acontecer quando o código está incorreto ou já foi usado.
+Este código expirou.
+Kosovo
+Uzbequistão
+Ilhas Aland
+Sua sessão expirou. Tente novamente.
+Verificar
+África do Sul
+Digite seu endereço de e-mail para continuar
+Um e-mail de login com mais instruções foi enviado para . Verifique seu e-mail para concluir o login.
+Digite sua senha
+Criar conta
+Afeganistão
+Ao tocar em "", você indica que está de acordo com os .
+Canadá
+Dinamarca
+Áustria
+Os e-mails não coincidem
+Sudão do Sul
+Iêmen
+Guiné-Bissau
+Arábia Saudita
+Logotipo do app
+Ilhas Virgens Americanas
+Fazer login com o telefone
+Indonésia
+Inicialmente, você queria fazer login com o e-mail
+Venezuela
+Problemas com login?
+Confirmar sua identidade
+Dominica
+Nova senha
+Gabão
+Você já usou o e-mail . Faça login com o para continuar.
+Nova Zelândia
+Mianmar [Birmânia]
+Islândia
+Etiópia
+Cuba
+França
+China
+Você já usou . Para conectar sua conta do com , basta fazer login com o link de e-mail abaixo.
+Zâmbia
+Cidade do Vaticano
+Gâmbia
+Concluído
+Cancelar
+Digite o nome da sua conta
+Iraque
+Vietnã
+Endereço de e-mail inválido
+Ilha Mayotte
+Fazer login
+Redefinir sua senha
+Enviar
+Nepal
+Toquelau
+Não há suporte para as credenciais selecionadas do provedor de autenticação.
+Colômbia
+Ao tocar em SALVAR, você indica que concordou com os
+Burundi
+Mauritânia
+Twitter
+Seu e-mail foi verificado
+Papua-Nova Guiné
+Salvar
+Verificando...
+Fazer login
+Timor Leste
+Djibuti
+Código de 6 dígitos
+Comores
+O código de verificação não pode estar vazio.
+O código da ação é inválido. Isso pode acontecer quando o código está incorreto ou já foi usado.
+Kosovo
+Tente estas soluções comuns:
+Fazer login com
+Tente abrir o link usando o mesmo dispositivo ou navegador que você usou para iniciar o processo de login.
+Estônia
+Facebook
+Argentina
+Ao continuar, você concorda com nossos Termos de Serviço e a Política de Privacidade.
+Digite um novo endereço de e-mail
+Desvincular
+Guiné-Conacri
+Suíça
+Andorra
+Problemas para receber e-mails?
+Japão
+Montenegro
+Moçambique
+O endereço de e-mail não corresponde a uma conta existente
+Turquia
+Tadjiquistão
+República Popular Democrática do Laos
+Telefone
+Reenviar
+Honduras
+Níger
+O endereço de e-mail não corresponde a uma conta existente
+Jordânia
+Siga as instruções enviadas para para recuperar sua senha
+Fazer login com o e-mail
+Rússia
+O endereço de e-mail já está sendo usado por outra conta
+Polônia
+Israel
+Erro encontrado
+Número
+Insira o reCAPTCHA.
+Nicarágua
+Burkina Fasso
+Código incorreto. Tente novamente.
+A sessão deste login expirou ou foi apagada.
+Ilhas Turks e Caicos
+Reenviar o código em
+Verifique seu e-mail
+Adicionar senha
+El Salvador
+Sérvia
+Belize
+para
+Para conectar sua conta do com este e-mail, é necessário abrir o link no mesmo dispositivo ou navegador.
+Suécia
+São Martinho
+Santa Lúcia
+@string/app_name
+Verifique seu e-mail
+Sua solicitação para verificar o e-mail expirou ou o link já foi usado
+Omã
+Países Baixos Caribenhos
+Endereço de e-mail atualizado
+Fazer login com o Twitter
+Número de telefone
+Você já tem uma conta
+Tailândia
+Código incorreto. Tente novamente.
+Principado de Liechtenstein
+Editar nome
+Tente abrir o link usando o mesmo dispositivo ou navegador que você usou para iniciar o processo de login.
+Holanda
+Guiné Equatorial
+Austrália
+Trinidad e Tobago
+Digite seu nome
+Ilha de Ascensão
+Ocorreu um erro na rede.
+Fazer login com o
+Escolha a senha
+Território Britânico do Oceano Índico
+Uganda
+Noruega
+Este número de telefone já foi usado muitas vezes.
+Eritreia
+Ilhas Maurício
+Ocorreu um erro. Tente novamente.
+Senha
+São Cristóvão
+Voltar
+Digite seu endereço de e-mail para continuar
+Confirmar seu número de telefone
+Libéria
+Já existe uma conta com esse endereço de e-mail.
+Madagascar
+Cazaquistão
+Fazendo login…
+Panamá
+Tonga
+Ilhas Wallis e Futuna
+Não foi possível atualizar seu endereço de e-mail
+Você já usou para fazer login. Insira sua senha para essa conta.
+Anguila
+Este e-mail já está sendo usado por uma conta anônima. Redefina a senha para recuperá-lo.
+República Dominicana
+Jérsei
+Recuperar a senha
+Insira o código de seis dígitos enviado para ‎
+Ruanda
+Insira o código de dígitos que enviamos
+Este número de telefone já foi usado muitas vezes.
+O e-mail fornecido é diferente do usado no login da sessão atual.
+Desvincular conta
+Verifique se você ainda tem espaço na sua caixa de entrada, além de outros problemas relacionados à configuração.
+Paraguai
+Argélia
+Você digitou a senha incorretamente várias vezes. Tente novamente em alguns minutos.
+Ilha Norfolk
+O número de telefone foi verificado automaticamente
+Para alterar sua senha, primeiro insira sua senha atual.
+Voltar
+Índia
+Benin
+Continuar
+Faça login com a sua nova senha
+Aruba
+Luxemburgo
+Ilhas Faroé
+Kosovo
+Bulgária
+Você não poderá mais fazer login usando sua conta
+Verifique sua conexão com a Internet.
+Concluindo sua inscrição...
+Talvez você receba um SMS quando tocar em . Taxas de mensagens e dados podem ser aplicáveis.
+Vanuatu
+Samoa Americana
+Brasil
+Continuar para
+Suazilândia
+Não foi possível enviar o código de redefinição de senha para o e-mail especificado.
+Dispensar
+Bélgica
+Geórgia
+Namíbia
+E-mail de login enviado\n
+Código enviado.
+Reunião
+Tente redefinir sua senha novamente
+Continuar como convidado
+Equador
+Senegal
+Botsuana
+Micronésia
+Hong Kong
+Albânia
+Seu endereço de e-mail de login foi alterado novamente para .
+Camarões
+Ilhas Svalbard e Jan Mayen
+Ucrânia
+Se as etapas acima não funcionarem, envie o e-mail novamente. Observação: isso desativará o link do e-mail anterior.
+Turcomenistão
+Jamaica
+GitHub
+Paquistão
+Reenviar
+Síria
+E-mail
+Próxima
+Este código não é mais válido.
+Fazer login com o Facebook
+Confirmar e-mail
+Nome e sobrenome
+Granada
+Saara Ocidental
+Ocorreu um erro desconhecido.
+Você já usou o e-mail para fazer login. Digite sua senha para essa conta.
+Irlanda
+República Democrática do Congo
+Recuperar a senha
+República do Congo
+Continuar como convidado
+San Marino
+Chipre
+Ilhas Salomão
+Continuar com ?
+Maldivas
+São Tomé e Príncipe
+Confirme seu e-mail para concluir o login
+Eslovênia
+Coreia do Sul
+Lesoto
+Fazer login com o telefone
+Verifique seu e-mail novamente
+Azerbaijão
+Google
+Link de e-mail inválido.
+Termos de Serviço
+Gibraltar
+Tanzânia
+Conta desvinculada
+Saint-Pierre e Miquelon
+Somália
+Alemanha
+Problemas para receber e-mails?
+Quirguistão
+Você já usou o e-mail para fazer login. Insira a senha dessa conta.
+{plural_var,plural, =1{A senha não é forte o suficiente. Use pelo menos caractere e combine letras e números.}one{A senha não é forte o suficiente. Use pelo menos caractere e combine letras e números.}other{A senha não é forte o suficiente. Use pelo menos caracteres e combine letras e números.}}
+Zimbábue
+Siga as instruções enviadas para para recuperar sua senha.
+Ocorreu um problema na verificação do seu número de telefone.
+Novo dispositivo ou navegador detectado
+República Tcheca
+Tuvalu
+Fazer login com o GitHub
+Groenlândia
+Líbia
+Google
+Quênia
+Esta ação apagará todos os dados associados à sua conta e não poderá ser desfeita. Tem certeza que quer excluir sua conta?
+Talvez você receba um SMS quando tocar em "Verificar". Taxas de mensagens e dados podem ser aplicáveis.
+Bolívia
+Porto Rico
+Desvincular conta?
+Ilha Christmas
+
+Obrigado,
+Equipe do app
+Para enviar os códigos de verificação, forneça um número de telefone para o destinatário.
+Sudão
+Bahamas
+Costa do Marfim
+Palau
+Mongólia
+Espanha
+Costa Rica
+Samoa
+Mali
+Catar
+Uruguai
+Egito
+Ilhas Marshall
+São Martinho Holandesa
+Antígua e Barbuda
+Ilhas Marianas do Norte
+Ilhas Malvinas
+Peru
+Senha atual
+Bem-vindo
+Fiji
+Quiribati
+Taiwan
+Serra Leoa
+Verifique se o e-mail foi filtrado ou marcado como spam.
+Verificando...
+Martinica
+Togo
+Você já tem uma conta
+O seu e-mail para login no app foi alterado
+Veja como redefinir sua senha nas instruções enviadas para este e-mail
+Nauro
+Brunei
+Chile
+Polinésia Francesa
+Bermudas
+Niue
+Guadalupe
+Territórios Palestinos
+Eslováquia
+Guernsey
+Nigéria
+Coreia do Norte
+Seu código de verificação é .
+México
+Butão
+Ilha de Man
+Malásia
+Ilhas Coco (Keeling)
+Se você ainda quiser conectar sua conta do , abra o link no mesmo dispositivo em que você iniciou o login. Caso contrário, toque em Continuar para fazer login neste dispositivo.
+Inicialmente, você quis conectar o à sua conta de e-mail, mas abriu o link em um dispositivo diferente, em que você não está conectado.
+Reenviar código em 0:
+Marrocos
+Bangladesh
+Smartphone
+Finlândia
+Emirados Árabes Unidos
+Senha
+República Centro-Africana
+Curaçao
+Tunísia
+Senha alterada
+Grécia
+Angola
+Kuwait
+O e-mail e a senha que você digitou não coincidem
+