Аутентификация в Firebase с использованием учетных записей с паролем на платформах Apple.

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

Прежде чем вы начнете

Используйте Swift Package Manager для установки зависимостей Firebase и управления ими.

  1. В Xcode, открыв проект приложения, выберите «Файл» > «Добавить пакеты» .
  2. При появлении запроса добавьте репозиторий Firebase SDK для платформ Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Выберите библиотеку аутентификации Firebase.
  5. Добавьте флаг -ObjC в раздел «Другие флаги компоновщика» настроек сборки вашей цели.
  6. По завершении Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.

Далее выполните несколько шагов настройки:

  1. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
  2. Включить вход по электронной почте/паролю:
    1. В консоли Firebase откройте раздел Auth .
    2. На вкладке «Метод входа» включите метод входа по электронной почте и паролю и нажмите «Сохранить» .

Создайте учетную запись на основе пароля

Чтобы создать новую учетную запись пользователя с паролем, выполните следующие шаги при входе в приложение:

  1. Импортируйте модуль FirebaseCore в свой UIApplicationDelegate , а также любые другие модули Firebase, которые использует ваш делегат приложения. Например, чтобы использовать Cloud Firestore и аутентификацию:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Быстрый

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Цель-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Настройте общий экземпляр FirebaseApp в методе application(_:didFinishLaunchingWithOptions:) делегата вашего приложения:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Быстрый

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Цель-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Если вы используете SwiftUI, вам необходимо создать делегат приложения и прикрепить его к структуре вашего App через UIApplicationDelegateAdaptor или NSApplicationDelegateAdaptor . Вы также должны отключить переключение делегатов приложений. Дополнительную информацию смотрите в инструкциях SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Когда новый пользователь регистрируется с помощью формы регистрации вашего приложения, выполните все шаги проверки новой учетной записи, которые требуются вашему приложению, например проверьте, что пароль новой учетной записи был введен правильно и соответствует вашим требованиям сложности.
  5. Создайте новую учетную запись, передав адрес электронной почты и пароль нового пользователя в createUser .

    Быстрый

    Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
      // ...
    }

    Цель-C

    [[FIRAuth auth] createUserWithEmail:email
                               password:password
                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                          NSError * _Nullable error) {
      // ...
    }];
    Если новая учетная запись была успешно создана, пользователь вошел в систему, и вы можете получить данные учетной записи пользователя из объекта результата, который передается методу обратного вызова.

Войдите в систему с помощью адреса электронной почты и пароля.

Действия по входу пользователя с паролем аналогичны действиям по созданию новой учетной записи. В процессе входа в приложение выполните следующие действия:

  1. Импортируйте модуль FirebaseCore в свой UIApplicationDelegate , а также любые другие модули Firebase, которые использует ваш делегат приложения. Например, чтобы использовать Cloud Firestore и аутентификацию:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Быстрый

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Цель-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Настройте общий экземпляр FirebaseApp в методе application(_:didFinishLaunchingWithOptions:) делегата вашего приложения:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Быстрый

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Цель-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Если вы используете SwiftUI, вам необходимо создать делегат приложения и прикрепить его к структуре вашего App через UIApplicationDelegateAdaptor или NSApplicationDelegateAdaptor . Вы также должны отключить переключение делегатов приложений. Дополнительную информацию смотрите в инструкциях SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Когда пользователь входит в ваше приложение, передайте его адрес электронной почты и пароль для signIn .

    Быстрый

    Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
      guard let strongSelf = self else { return }
      // ...
    }

    Цель-C

    [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
      // ...
    }];
    Если пользователь успешно войдет в систему, вы сможете получить данные учетной записи пользователя из объекта результата, который передается методу обратного вызова.

Рекомендуется: включить защиту перечисления электронной почты.

Некоторые методы аутентификации Firebase, которые принимают адреса электронной почты в качестве параметров, вызывают определенные ошибки, если адрес электронной почты не зарегистрирован, когда его необходимо зарегистрировать (например, при входе в систему с адресом электронной почты и паролем), или зарегистрирован, когда его нельзя использовать (например, при изменении адреса электронной почты пользователя). Хотя это может быть полезно для предложения пользователям конкретных средств защиты, злоумышленники также могут использовать его для обнаружения адресов электронной почты, зарегистрированных вашими пользователями.

Чтобы снизить этот риск, мы рекомендуем вам включить защиту перечисления электронной почты для вашего проекта с помощью инструмента Google Cloud gcloud . Обратите внимание, что включение этой функции меняет поведение отчетов об ошибках Firebase Authentication: убедитесь, что ваше приложение не полагается на более конкретные ошибки.

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, которая связывается с учетными данными (то есть именем пользователя и паролем, номером телефона или информацией поставщика аутентификации), с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении вашего проекта, независимо от того, как пользователь входит в систему.

  • В своих приложениях вы можете получить базовую информацию профиля пользователя из объекта User . См. Управление пользователями .

  • В правилах безопасности базы данных реального времени и облачного хранилища Firebase вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth и использовать его для управления тем, к каким данным пользователь может получить доступ.

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

Чтобы выйти из системы, вызовите signOut: .

Быстрый

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Цель-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Вы также можете добавить код обработки ошибок для всего спектра ошибок аутентификации. См. Обработка ошибок .