Gerenciar usuários no Firebase

Crie um usuário

Você cria um novo usuário no seu projeto do Firebase chamando o método createUserWithEmailAndPassword ou fazendo login em um usuário pela primeira vez usando um provedor de identidade federado, como Google Sign-In ou Facebook Login .

Você também pode criar novos usuários autenticados por senha na seção Autenticação do Firebase console , na página Usuários ou usando o Admin SDK .

Obtenha o usuário atualmente conectado

A maneira recomendada de obter o usuário atual é definindo um observador no objeto Auth:

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth();
onAuthStateChanged
(auth, (user) => {
 
if (user) {
   
// User is signed in, see docs for a list of available properties
   
// https://firebase.google.com/docs/reference/js/auth.user
   
const uid = user.uid;
   
// ...
 
} else {
   
// User is signed out
   
// ...
 
}
});
firebase.auth().onAuthStateChanged((user) => {
 
if (user) {
   
// User is signed in, see docs for a list of available properties
   
// https://firebase.google.com/docs/reference/js/v8/firebase.User
   
var uid = user.uid;
   
// ...
 
} else {
   
// User is signed out
   
// ...
 
}
});

Ao usar um observador, você garante que o objeto Auth não esteja em um estado intermediário — como inicialização — quando você obtém o usuário atual. Quando você usa signInWithRedirect , o observador onAuthStateChanged aguarda até que getRedirectResult seja resolvido antes de ser acionado.

Você também pode obter o usuário conectado no momento usando a propriedade currentUser . Se um usuário não estiver conectado, currentUser será nulo:

import { getAuth } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

if (user) {
 
// User is signed in, see docs for a list of available properties
 
// https://firebase.google.com/docs/reference/js/auth.user
 
// ...
} else {
 
// No user is signed in.
}
const user = firebase.auth().currentUser;

if (user) {
 
// User is signed in, see docs for a list of available properties
 
// https://firebase.google.com/docs/reference/js/v8/firebase.User
 
// ...
} else {
 
// No user is signed in.
}

Obtenha o perfil de um usuário

Para obter informações de perfil de um usuário, use as propriedades de uma instância de User . Por exemplo:

import { getAuth } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;
if (user !== null) {
 
// The user object has basic properties such as display name, email, etc.
 
const displayName = user.displayName;
 
const email = user.email;
 
const photoURL = user.photoURL;
 
const emailVerified = user.emailVerified;

 
// The user's ID, unique to the Firebase project. Do NOT use
 
// this value to authenticate with your backend server, if
 
// you have one. Use User.getToken() instead.
 
const uid = user.uid;
}
const user = firebase.auth().currentUser;
if (user !== null) {
 
// The user object has basic properties such as display name, email, etc.
 
const displayName = user.displayName;
 
const email = user.email;
 
const photoURL = user.photoURL;
 
const emailVerified = user.emailVerified;

 
// The user's ID, unique to the Firebase project. Do NOT use
 
// this value to authenticate with your backend server, if
 
// you have one. Use User.getIdToken() instead.
 
const uid = user.uid;
}

Obtenha informações de perfil específicas do provedor de um usuário

Para obter as informações de perfil recuperadas dos provedores de login vinculados a um usuário, use a propriedade providerData . Por exemplo:

import { getAuth } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

if (user !== null) {
  user
.providerData.forEach((profile) => {
    console
.log("Sign-in provider: " + profile.providerId);
    console
.log("  Provider-specific UID: " + profile.uid);
    console
.log("  Name: " + profile.displayName);
    console
.log("  Email: " + profile.email);
    console
.log("  Photo URL: " + profile.photoURL);
 
});
}
const user = firebase.auth().currentUser;

if (user !== null) {
  user
.providerData.forEach((profile) => {
    console
.log("Sign-in provider: " + profile.providerId);
    console
.log("  Provider-specific UID: " + profile.uid);
    console
.log("  Name: " + profile.displayName);
    console
.log("  Email: " + profile.email);
    console
.log("  Photo URL: " + profile.photoURL);
 
});
}

Atualizar o perfil de um usuário

Você pode atualizar as informações básicas do perfil de um usuário (o nome de exibição do usuário e o URL da foto do perfil) com o método updateProfile . Por exemplo:

import { getAuth, updateProfile } from "firebase/auth";
const auth = getAuth();
updateProfile
(auth.currentUser, {
  displayName
: "Jane Q. User", photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(() => {
 
// Profile updated!
 
// ...
}).catch((error) => {
 
// An error occurred
 
// ...
});
const user = firebase.auth().currentUser;

user
.updateProfile({
  displayName
: "Jane Q. User",
  photoURL
: "https://example.com/jane-q-user/profile.jpg"
}).then(() => {
 
// Update successful
 
// ...
}).catch((error) => {
 
// An error occurred
 
// ...
});  

Definir o endereço de e-mail de um usuário

Você pode definir o endereço de e-mail de um usuário com o método updateEmail . Por exemplo:

import { getAuth, updateEmail } from "firebase/auth";
const auth = getAuth();
updateEmail
(auth.currentUser, "user@example.com").then(() => {
 
// Email updated!
 
// ...
}).catch((error) => {
 
// An error occurred
 
// ...
});
const user = firebase.auth().currentUser;

user
.updateEmail("user@example.com").then(() => {
 
// Update successful
 
// ...
}).catch((error) => {
 
// An error occurred
 
// ...
});

Enviar um e-mail de verificação a um usuário

Você pode enviar um email de verificação de endereço para um usuário com o método sendEmailVerification . Por exemplo:

import { getAuth, sendEmailVerification } from "firebase/auth";

const auth = getAuth();
sendEmailVerification
(auth.currentUser)
 
.then(() => {
   
// Email verification sent!
   
// ...
 
});
firebase.auth().currentUser.sendEmailVerification()
 
.then(() => {
   
// Email verification sent!
   
// ...
 
});

Você pode personalizar o modelo de e-mail usado na seção Autenticação do console do Firebase , na página Modelos de e-mail. Consulte Modelos de e-mail na Central de Ajuda do Firebase.

Também é possível passar o estado por meio de uma URL de continuação para redirecionar de volta ao aplicativo ao enviar um e-mail de verificação.

Além disso, você pode localizar o e-mail de verificação atualizando o código do idioma na instância Auth antes de enviar o e-mail. 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();

Definir uma senha de usuário

Você pode definir uma senha de usuário com o método updatePassword . Por exemplo:

import { getAuth, updatePassword } from "firebase/auth";

const auth = getAuth();

const user = auth.currentUser;
const newPassword = getASecureRandomPassword();

updatePassword
(user, newPassword).then(() => {
 
// Update successful.
}).catch((error) => {
 
// An error ocurred
 
// ...
});
const user = firebase.auth().currentUser;
const newPassword = getASecureRandomPassword();

user
.updatePassword(newPassword).then(() => {
 
// Update successful.
}).catch((error) => {
 
// An error ocurred
 
// ...
});

Envie um e-mail de redefinição de senha

Você pode enviar um email de redefinição de senha para um usuário com o método sendPasswordResetEmail . Por exemplo:

import { getAuth, sendPasswordResetEmail } from "firebase/auth";

const auth = getAuth();
sendPasswordResetEmail
(auth, email)
 
.then(() => {
   
// Password reset email sent!
   
// ..
 
})
 
.catch((error) => {
   
const errorCode = error.code;
   
const errorMessage = error.message;
   
// ..
 
});
firebase.auth().sendPasswordResetEmail(email)
 
.then(() => {
   
// Password reset email sent!
   
// ..
 
})
 
.catch((error) => {
   
var errorCode = error.code;
   
var errorMessage = error.message;
   
// ..
 
});

Você pode personalizar o modelo de e-mail usado na seção Autenticação do console do Firebase , na página Modelos de e-mail. Consulte Modelos de e-mail na Central de Ajuda do Firebase.

Também é possível passar o estado por meio de uma URL de continuação para redirecionar de volta ao aplicativo ao enviar um e-mail de redefinição de senha.

Além disso, você pode localizar o e-mail de redefinição de senha atualizando o código do idioma na instância Auth antes de enviar o e-mail. 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();

Você também pode enviar e-mails de redefinição de senha do console do Firebase.

Excluir um usuário

Você pode excluir uma conta de usuário com o método delete . Por exemplo:

import { getAuth, deleteUser } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

deleteUser
(user).then(() => {
 
// User deleted.
}).catch((error) => {
 
// An error ocurred
 
// ...
});
const user = firebase.auth().currentUser;

user
.delete().then(() => {
 
// User deleted.
}).catch((error) => {
 
// An error ocurred
 
// ...
});

Você também pode excluir usuários da seção Autenticação do console do Firebase , na página Usuários.

Reautenticar um usuário

Algumas ações sensíveis à segurança, como excluir uma conta , definir um endereço de e-mail principal e alterar uma senha , exigem que o usuário tenha feito login recentemente. Se você realizar uma dessas ações e o usuário tiver feito login há muito tempo, o a ação falha com um erro. Quando isso acontecer, autentique novamente o usuário obtendo novas credenciais de login do usuário e passando-as para reauthenticateWithCredential . Por exemplo:

import { getAuth, reauthenticateWithCredential } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

// TODO(you): prompt the user to re-provide their sign-in credentials
const credential = promptForCredentials();

reauthenticateWithCredential
(user, credential).then(() => {
 
// User re-authenticated.
}).catch((error) => {
 
// An error ocurred
 
// ...
});
const user = firebase.auth().currentUser;

// TODO(you): prompt the user to re-provide their sign-in credentials
const credential = promptForCredentials();

user
.reauthenticateWithCredential(credential).then(() => {
 
// User re-authenticated.
}).catch((error) => {
 
// An error occurred
 
// ...
});

Importar contas de usuário

Você pode importar contas de usuário de um arquivo para seu projeto do Firebase usando o comando auth:import da CLI do Firebase. Por exemplo:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14