Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Управление пользователями в Firebase

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Создать пользователя

Вы создаете нового пользователя в своем проекте Firebase, вызывая метод createUserWithEmail:password:completion: или впервые выполняя вход пользователя с помощью поставщика федеративных удостоверений, например Google Sign-In или Facebook Login .

Вы также можете создать новых пользователей с аутентификацией по паролю в разделе «Аутентификация» консоли Firebase на странице «Пользователи».

Получить текущего вошедшего пользователя

Рекомендуемый способ получить текущего пользователя — установить прослушиватель для объекта Auth:

Быстрый

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

Цель-C

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

Используя прослушиватель, вы гарантируете, что объект Auth не находится в промежуточном состоянии, таком как инициализация, когда вы получаете текущего пользователя.

Вы также можете получить текущего пользователя, вошедшего в систему, используя свойство currentUser . Если пользователь не вошел в систему, currentUser равен нулю:

Быстрый

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

Цель-C

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

Получить профиль пользователя

Чтобы получить информацию о профиле пользователя, используйте свойства экземпляра FIRUser . Например:

Быстрый

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 += " "
  }
  // ...
}

Цель-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;
  // ...
}

Получить информацию о профиле конкретного поставщика услуг пользователя

Чтобы получить информацию профиля, полученную от поставщиков входа, связанных с пользователем, используйте свойство providerData . Например:

Быстрый

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

Цель-C

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

Обновить профиль пользователя

Вы можете обновить основную информацию профиля пользователя — отображаемое имя пользователя и URL-адрес фотографии профиля — с помощью класса FIRUserProfileChangeRequest . Например:

Быстрый

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

Цель-C

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

Установить адрес электронной почты пользователя

Вы можете установить адрес электронной почты пользователя с помощью updateEmail:completion: Например:

Быстрый

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

Цель-C

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

Отправить пользователю электронное письмо с подтверждением

Вы можете отправить электронное письмо с подтверждением адреса пользователю с помощью метода sendEmailVerificationWithCompletion: Например:

Быстрый

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

Цель-C

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

Вы можете настроить шаблон электронной почты, который используется в разделе «Аутентификация» консоли Firebase на странице «Шаблоны электронной почты». См. Шаблоны электронной почты в Справочном центре Firebase.

Также можно передать состояние через URL-адрес продолжения , чтобы перенаправить обратно в приложение при отправке письма с подтверждением.

Кроме того, вы можете локализовать подтверждающее электронное письмо, обновив код языка в экземпляре Auth перед отправкой электронного письма. Например:

Быстрый

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

Цель-C

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

Установить пароль пользователя

Вы можете установить пароль пользователя с помощью updatePassword:completion: Например:

Быстрый

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

Цель-C

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

Отправить электронное письмо для сброса пароля

Вы можете отправить электронное письмо для сброса пароля пользователю с помощью sendPasswordResetWithEmail:completion: Например:

Быстрый

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

Цель-C

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

Вы можете настроить шаблон электронной почты, который используется в разделе «Аутентификация» консоли Firebase на странице «Шаблоны электронной почты». См. Шаблоны электронной почты в Справочном центре Firebase.

Также можно передать состояние через URL-адрес продолжения , чтобы перенаправить обратно в приложение при отправке электронного письма для сброса пароля.

Кроме того, вы можете локализовать электронное письмо для сброса пароля, обновив код языка в экземпляре Auth перед отправкой электронного письма. Например:

Быстрый

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

Цель-C

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

Вы также можете отправлять электронные письма для сброса пароля из консоли Firebase.

Удалить пользователя

Вы можете удалить учетную запись пользователя с помощью метода deleteWithCompletion . Например:

Быстрый

let user = Auth.auth().currentUser

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

Цель-C

FIRUser *user = [FIRAuth auth].currentUser;

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

Вы также можете удалить пользователей из раздела «Аутентификация» консоли Firebase на странице «Пользователи».

Повторная аутентификация пользователя

Некоторые действия, связанные с безопасностью, такие как удаление учетной записи , установка основного адреса электронной почты и изменение пароля , требуют, чтобы пользователь недавно вошел в систему. Если вы выполняете одно из этих действий, а пользователь вошел в систему слишком давно, действие завершается с ошибкой FIRAuthErrorCodeCredentialTooOld . В этом случае повторите аутентификацию пользователя, получив новые учетные данные для входа от пользователя и передав учетные данные для reauthenticate . Например:

Быстрый

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

Цель-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.
  }
}];

Импорт учетных записей пользователей

Вы можете импортировать учетные записи пользователей из файла в проект Firebase с помощью команды Firebase CLI auth:import . Например:

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