Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Gerenciar usuários no Firebase

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Criar um usuário

Você cria um novo usuário em seu projeto do Firebase chamando o createUserWithEmail:password:completion: ou fazendo login de um usuário pela primeira vez usando um provedor de identidade federado, como Login do Google ou Login do Facebook .

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

Obter o usuário conectado no momento

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

Rápido

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

Objetivo-C

self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

Ao usar um ouvinte, você garante que o objeto Auth não esteja em um estado intermediário — como inicialização — ao obter o usuário atual.

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

Rápido

if Auth.auth().currentUser != nil {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

Objetivo-C

if ([FIRAuth auth].currentUser) {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

Obter o perfil de um usuário

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

Rápido

let user = Auth.auth().currentUser
if let user = user {
  // 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 getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}

Objetivo-C

FIRUser *user = [FIRAuth auth].currentUser;
if (user) {
  // 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 getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

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

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

Rápido

let userInfo = Auth.auth().currentUser?.providerData[indexPath.row]
cell?.textLabel?.text = userInfo?.providerID
// Provider-specific UID
cell?.detailTextLabel?.text = userInfo?.uid

Objetivo-C

id<FIRUserInfo> userInfo = [FIRAuth auth].currentUser.providerData[indexPath.row];
cell.textLabel.text = [userInfo providerID];
// Provider-specific UID
cell.detailTextLabel.text = [userInfo uid];

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 a URL da foto do perfil — com a classe FIRUserProfileChangeRequest . Por exemplo:

Rápido

let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = displayName
changeRequest?.commitChanges { error in
  // ...
}

Objetivo-C

FIRUserProfileChangeRequest *changeRequest = [[FIRAuth auth].currentUser profileChangeRequest];
changeRequest.displayName = userInput;
[changeRequest commitChangesWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

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:completion: Por exemplo:

Rápido

Auth.auth().currentUser?.updateEmail(to: email) { error in
  // ...
}

Objetivo-C

[[FIRAuth auth].currentUser updateEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

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

Você pode enviar um e-mail de verificação de endereço para um usuário com o método sendEmailVerificationWithCompletion: Por exemplo:

Rápido

Auth.auth().currentUser?.sendEmailVerification { error in
  // ...
}

Objetivo-C

[[FIRAuth auth].currentUser sendEmailVerificationWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

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 um 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 de idioma na instância Auth antes de enviar o e-mail. Por exemplo:

Rápido

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

Objetivo-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

Definir a senha de um usuário

Você pode definir a senha de um usuário com o método updatePassword:completion: Por exemplo:

Rápido

Auth.auth().currentUser?.updatePassword(to: password) { error in
  // ...
}

Objetivo-C

[[FIRAuth auth].currentUser updatePassword:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

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

Você pode enviar um e-mail de redefinição de senha para um usuário com o método sendPasswordResetWithEmail:completion: Por exemplo:

Rápido

Auth.auth().sendPasswordReset(withEmail: email) { error in
  // ...
}

Objetivo-C

[[FIRAuth auth] sendPasswordResetWithEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

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 um 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 de idioma na instância Auth antes de enviar o e-mail. Por exemplo:

Rápido

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

Objetivo-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

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

Excluir um usuário

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

Rápido

let user = Auth.auth().currentUser

user?.delete { error in
  if let error = error {
    // An error happened.
  } else {
    // Account deleted.
  }
}

Objetivo-C

FIRUser *user = [FIRAuth auth].currentUser;

[user deleteWithCompletion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // Account deleted.
  }
}];

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. A ação falha com o erro FIRAuthErrorCodeCredentialTooOld . Quando isso acontecer, reautentique o usuário obtendo novas credenciais de entrada do usuário e passando as credenciais para reauthenticate . Por exemplo:

Rápido

let user = Auth.auth().currentUser
var credential: AuthCredential

// Prompt the user to re-provide their sign-in credentials

user?.reauthenticate(with: credential) { error in
  if let error = error {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}

Objetivo-C

FIRUser *user = [FIRAuth auth].currentUser;
FIRAuthCredential *credential;

// Prompt the user to re-provide their sign-in credentials

[user reauthenticateWithCredential:credential completion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}];

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 Firebase CLI. Por exemplo:

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