Gerenciar usuários no Firebase

Crie um usuário

Você cria um novo usuário no seu projeto do Firebase chamando o método createUser 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 console do Firebase , na página Usuários.

Obtenha o usuário atualmente conectado

A maneira recomendada de obter o usuário atual é definindo 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 será nulo:

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.
  // ...
}

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 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;
  // ...
}

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:

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

Rápido

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

Objetivo-C

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

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

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 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:

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 uma senha de usuário

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

Rápido

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

Objetivo-C

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

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 sendPasswordReset . 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 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:

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 console do Firebase.

Excluir um usuário

Você pode excluir uma conta de usuário com o método delete . 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. Se você realizar uma dessas ações e o usuário tiver feito login há muito tempo, o a ação falha com o erro FIRAuthErrorCodeCredentialTooOld . Quando isso acontecer, autentique novamente o usuário obtendo novas credenciais de login do usuário e passando-as 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 CLI do Firebase. Por exemplo:

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