Estou usando o Firebase node api em meus arquivos javascript para o login do Google.
firebase.initializeApp(config);
let provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
Isso funciona bem e o usuário pode fazer login com suas credenciais do Google. Quando o usuário visita a página novamente, o pop-up é aberto novamente, mas como ele já fez login, o pop-up fecha sem exigir nenhuma interação do usuário. Existe alguma maneira de verificar se já existe um usuário conectado antes de abrir o pop-up?
javascript
web
firebase
firebase-authentication
Jophin Joseph
fonte
fonte
onAuthStateChanged
. Isso foi adicionado em 4.6.0: firebase.google.com/support/release-notes/js#4.6.0 Você pode obtê-lo no método decurrentUser.metadata
login ou em (hora do último login e hora de criação) ...Você também pode verificar se há um usuário atual
fonte
Não é possível dizer se um usuário será assinado quando uma página começar a carregar, no entanto, há uma solução alternativa.
Então, quando a página começar a carregar, você pode assumir de forma otimista que o usuário fará login novamente automaticamente e adiar a caixa de diálogo até que você tenha certeza (ou seja, após os
onAuthStateChanged
disparos). Caso contrário, se alocalStorage
chave estiver vazia, você pode mostrar a caixa de diálogo imediatamente.O
onAuthStateChanged
evento firebase será disparado cerca de 2 segundos após o carregamento de uma página.Estou usando isso com React e react-router . Eu coloquei o código acima em
componentDidMount
meu componente raiz do aplicativo. Lá, no render, eu tenho algunsPrivateRoutes
E é assim que meu PrivateRoute é implementado:
fonte
Não há necessidade de usar a função onAuthStateChanged () neste cenário.
Você pode detectar facilmente se o usuário está conectado ou não executando:
Para aqueles que enfrentam o problema de "retornar nulo", isso ocorre porque você não está esperando a conclusão da chamada do firebase.
Vamos supor que você execute a ação de login na página A e, em seguida, invoque a página B, na página B você pode chamar o seguinte código JS para testar o comportamento esperado:
Se o usuário estiver logado, "var user" conterá a carga útil JSON esperada; caso contrário, será apenas "nulo"
E isso é tudo que você precisa.
Saudações
fonte
firebase.auth.currentUser
retorna undefinedOutra maneira é usar a mesma coisa que o firebase usa.
Por exemplo, quando o usuário faz login, o firebase armazena os detalhes abaixo no armazenamento local. Quando o usuário volta à página, o firebase usa o mesmo método para identificar se o usuário deve fazer login automaticamente.
ATTN: como isso não está listado nem recomendado pelo firebase. Você pode chamar esse método de maneira não oficial de fazer isso. O que significa que mais tarde, se o firebase alterar seu funcionamento interno, esse método pode não funcionar. Ou em resumo. Use por sua conta e risco! :)
fonte
Isso funciona:
fonte
Se você estiver permitindo usuários anônimos, bem como aqueles conectados com e-mail, você pode usar
firebase.auth().currentUser.isAnonymous
, que retornarátrue
oufalse
.fonte
usar
Firebase.getAuth()
. Ele retorna o estado atual do cliente Firebase. Caso contrário, o valor de retorno énull
Aqui estão os documentos: https://www.firebase.com/docs/web/api/firebase/getauth.htmlfonte
firebase.getAuth()
Primeiro importe o seguinte
Então
fonte