Для авторизации пользователя с помощью Firebase Authentication можно отправить SMS-сообщение на телефон пользователя. Пользователь авторизуется, используя одноразовый код, содержащийся в SMS-сообщении.
Самый простой способ добавить вход по номеру телефона в ваше приложение — использовать FirebaseUI, который включает в себя готовый виджет для входа по номеру телефона, а также по паролю и федеративной авторизации. В этом документе описывается, как реализовать вход по номеру телефона с помощью Firebase SDK.
Прежде чем начать
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это через консоль Firebase .
Используйте Swift Package Manager для установки и управления зависимостями Firebase.
- В Xcode, открыв проект приложения, перейдите в меню File > Add Packages .
- При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
- Выберите библиотеку Firebase Authentication .
- Добавьте флаг
-ObjCв раздел «Другие флаги компоновщика» в настройках сборки вашей целевой системы. - После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Вопросы безопасности
Аутентификация только по номеру телефона, хотя и удобна, менее безопасна, чем другие доступные методы, поскольку номер телефона может легко передаваться от одного пользователя к другому. Кроме того, на устройствах с несколькими профилями пользователей любой пользователь, имеющий возможность получать SMS-сообщения, может войти в учетную запись, используя номер телефона устройства.
Если в вашем приложении используется вход по номеру телефона, следует предлагать его наряду с более безопасными способами входа и информировать пользователей о компромиссах в плане безопасности, связанных с использованием входа по номеру телефона.
Включите вход по номеру телефона для вашего проекта Firebase.
Для авторизации пользователей по SMS необходимо сначала включить метод авторизации по номеру телефона в вашем проекте Firebase:
- В консоли Firebase откройте раздел «Аутентификация» .
- На странице «Способ входа» включите способ входа по номеру телефона .
- Необязательно : на странице настроек задайте политику для регионов, в которые вы хотите разрешить или запретить отправку SMS-сообщений. Настройка региональной политики для SMS-сообщений поможет защитить ваши приложения от злоупотреблений, связанных с SMS.
Включить проверку приложения
Для использования аутентификации по номеру телефона Firebase должен иметь возможность проверять, что запросы на вход по номеру телефона поступают из вашего приложения. Firebase Authentication решает эту задачу двумя способами:
- Бесшумные уведомления APNs : Когда вы впервые авторизуете пользователя с помощью номера телефона на устройстве, Firebase Authentication отправляет токен на устройство с помощью бесшумного push-уведомления. Если ваше приложение успешно получает уведомление от Firebase, авторизация по номеру телефона может быть продолжена.
В iOS 8.0 и более новых версиях для бесшумных уведомлений не требуется явное согласие пользователя, поэтому отказ пользователя от получения уведомлений APNs в приложении никак не влияет на их работу. Таким образом, приложению не нужно запрашивать разрешение пользователя на получение push-уведомлений при использовании аутентификации по номеру телефона Firebase.
- Проверка reCAPTCHA : В случае, если отправка или получение бесшумного push-уведомления невозможны, например, когда пользователь отключил фоновое обновление для вашего приложения или при тестировании вашего приложения на симуляторе iOS, Firebase Authentication использует проверку reCAPTCHA для завершения процесса входа в систему с телефона. Зачастую проверку reCAPTCHA можно пройти без необходимости решения каких-либо задач пользователем.
При правильной настройке бесшумных push-уведомлений, с прохождением проверки reCAPTCHA столкнется лишь очень небольшой процент пользователей. Тем не менее, необходимо убедиться, что вход по номеру телефона работает корректно независимо от того, доступны ли бесшумные push-уведомления.
Начните получать бесшумные уведомления
Чтобы включить уведомления APNs для использования с Firebase Authentication :
- В Xcode включите push-уведомления для вашего проекта.
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APNs, обязательно создайте его в Центре разработчиков Apple .
В консоли Firebase внутри вашего проекта выберите значок шестеренки, затем выберите «Настройки проекта» и перейдите на вкладку «Облачные сообщения» .
В разделе «Ключ аутентификации APNs» в настройках приложения iOS нажмите кнопку «Загрузить» , чтобы загрузить ключ аутентификации для разработки, ключ аутентификации для производства или оба. Требуется как минимум один ключ.
Перейдите к месту, где вы сохранили свой ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Центре для разработчиков Apple ) и нажмите «Загрузить» .
Если у вас уже есть сертификат APNs, вы можете загрузить его вместо сертификата.
- В Xcode включите для своего проекта функцию «Фоновые режимы» , а затем установите флажки для режимов «Фоновая загрузка» и «Удаленные уведомления» .
Настройте проверку reCAPTCHA.
Чтобы включить использование проверки reCAPTCHA в Firebase SDK:
- Добавьте пользовательские схемы URL-адресов в свой проект Xcode:
- Откройте конфигурацию проекта: дважды щелкните имя проекта в левом древовидном представлении. Выберите свое приложение в разделе «ЦЕЛИ» , затем перейдите на вкладку «Информация» и разверните раздел «Типы URL» .
- Нажмите кнопку «+» и добавьте свой закодированный идентификатор приложения в качестве схемы URL. Вы можете найти свой закодированный идентификатор приложения на странице «Общие настройки» консоли Firebase в разделе вашего iOS-приложения. Остальные поля оставьте пустыми.
После завершения настройки ваш конфигурационный файл должен выглядеть примерно так (но с учетом значений, специфичных для вашего приложения):

- Необязательно : если вы хотите настроить способ отображения
SFSafariViewControllerпри показе reCAPTCHA пользователю, создайте пользовательский класс, соответствующий протоколуAuthUIDelegate, и передайте его вverifyPhoneNumber(_:uiDelegate:completion:).
Отправить проверочный код на телефон пользователя
Для инициализации входа по номеру телефона отобразите пользователю интерфейс, предлагающий ввести номер телефона, а затем вызовите verifyPhoneNumber(_:uiDelegate:completion:) , чтобы запросить у Firebase отправку кода аутентификации на телефон пользователя по SMS:
Получите номер телефона пользователя.
Юридические требования различаются, но в качестве передовой практики и для того, чтобы заложить основу для понимания пользователями ситуации, следует сообщить им, что при использовании входа по телефону они могут получить SMS-сообщение для подтверждения, и применяются стандартные тарифы.
- Вызовите
verifyPhoneNumber(_:uiDelegate:completion:), передав ему номер телефона пользователя.Быстрый
PhoneAuthProvider.provider() .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in if let error = error { self.showMessagePrompt(error.localizedDescription) return } // Sign in using the verificationID and the code sent to the user // ... }
Objective-C
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput UIDelegate:nil completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; return; } // Sign in using the verificationID and the code sent to the user // ... }];
Метод
verifyPhoneNumberявляется реентерабельным: если вы вызываете его несколько раз, например, в методеonAppearпредставления, методverifyPhoneNumberне отправит второе SMS-сообщение, если только не истечет время ожидания исходного запроса.При вызове
verifyPhoneNumber(_:uiDelegate:completion:)Firebase отправляет вашему приложению тихое push-уведомление или запрашивает у пользователя проверку reCAPTCHA. После получения уведомления или завершения проверки reCAPTCHA, Firebase отправляет SMS-сообщение с кодом аутентификации на указанный номер телефона и передает идентификатор подтверждения в вашу функцию завершения. Для авторизации пользователя вам понадобятся как код подтверждения, так и идентификатор подтверждения.SMS-сообщения, отправляемые Firebase, также можно локализовать, указав язык аутентификации с помощью свойства
languageCodeв вашем экземпляре Auth.Быстрый
// Change language code to french. Auth.auth().languageCode = "fr";
Objective-C
// Change language code to french. [FIRAuth auth].languageCode = @"fr";
Сохраните идентификатор подтверждения и восстановите его при загрузке приложения. Таким образом, вы можете быть уверены, что у вас останется действительный идентификатор подтверждения, если приложение будет закрыто до того, как пользователь завершит процесс входа в систему (например, при переключении на приложение для SMS).
Вы можете сохранить идентификатор подтверждения любым удобным для вас способом. Простой способ — сохранить идентификатор подтверждения в объекте
NSUserDefaults:Быстрый
UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
Objective-C
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:verificationID forKey:@"authVerificationID"];
Затем вы можете восстановить сохраненное значение:
Быстрый
let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
Objective-C
NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
Если вызов функции verifyPhoneNumber(_:uiDelegate:completion:) завершится успешно, вы можете предложить пользователю ввести код подтверждения, когда он получит его в SMS-сообщении.
Войдите в систему, используя код подтверждения.
После того, как пользователь предоставит вашему приложению код подтверждения из SMS-сообщения, выполните авторизацию пользователя, создав объект FIRPhoneAuthCredential на основе кода подтверждения и идентификатора подтверждения и передав этот объект в функцию signInWithCredential:completion:
- Получите от пользователя код подтверждения.
- Создайте объект
FIRPhoneAuthCredentialна основе кода подтверждения и идентификатора подтверждения.Быстрый
let credential = PhoneAuthProvider.provider().credential( withVerificationID: verificationID, verificationCode: verificationCode )
Objective-C
FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID verificationCode:userInput];
- Войдите в систему, используя объект
FIRPhoneAuthCredential:Быстрый
Auth.auth().signIn(with: credential) { authResult, error in if let error = error { let authError = error as NSError if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue { // The user is a multi-factor user. Second factor challenge is required. let resolver = authError .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver var displayNameString = "" for tmpFactorInfo in resolver.hints { displayNameString += tmpFactorInfo.displayName ?? "" displayNameString += " " } self.showTextInputPrompt( withMessage: "Select factor to sign in\n\(displayNameString)", completionBlock: { userPressedOK, displayName in var selectedHint: PhoneMultiFactorInfo? for tmpFactorInfo in resolver.hints { if displayName == tmpFactorInfo.displayName { selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo } } PhoneAuthProvider.provider() .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil, multiFactorSession: resolver .session) { verificationID, error in if error != nil { print( "Multi factor start sign in failed. Error: \(error.debugDescription)" ) } else { self.showTextInputPrompt( withMessage: "Verification code for \(selectedHint?.displayName ?? "")", completionBlock: { userPressedOK, verificationCode in let credential: PhoneAuthCredential? = PhoneAuthProvider.provider() .credential(withVerificationID: verificationID!, verificationCode: verificationCode!) let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator .assertion(with: credential!) resolver.resolveSignIn(with: assertion!) { authResult, error in if error != nil { print( "Multi factor finanlize sign in failed. Error: \(error.debugDescription)" ) } else { self.navigationController?.popViewController(animated: true) } } } ) } } } ) } else { self.showMessagePrompt(error.localizedDescription) return } // ... return } // User is signed in // ... }
Objective-C
[[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) { FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; NSMutableString *displayNameString = [NSMutableString string]; for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { [displayNameString appendString:tmpFactorInfo.displayName]; [displayNameString appendString:@" "]; } [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString] completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) { FIRPhoneMultiFactorInfo* selectedHint; for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { if ([displayName isEqualToString:tmpFactorInfo.displayName]) { selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo; } } [FIRPhoneAuthProvider.provider verifyPhoneNumberWithMultiFactorInfo:selectedHint UIDelegate:nil multiFactorSession:resolver.session completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; } else { [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName] completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) { FIRPhoneAuthCredential *credential = [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID verificationCode:verificationCode]; FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { [self showMessagePrompt:error.localizedDescription]; } else { NSLog(@"Multi factor finanlize sign in succeeded."); } }]; }]; } }]; }]; } else if (error) { // ... return; } // User successfully signed in. Get user data from the FIRUser object if (authResult == nil) { return; } FIRUser *user = authResult.user; // ... }];
Проверьте с помощью вымышленных телефонных номеров.
Для разработки можно использовать вымышленные номера телефонов через консоль Firebase . Тестирование с использованием вымышленных номеров телефонов предоставляет следующие преимущества:
- Проверьте подлинность номера телефона, не расходуя свою квоту трафика.
- Проверьте подлинность номера телефона, не отправляя SMS-сообщение.
- Проводите последовательные тесты с одним и тем же номером телефона без ограничения скорости. Это сводит к минимуму риск отклонения заявки в процессе проверки в App Store, если рецензент использует один и тот же номер телефона для тестирования.
- Легко тестируйте в средах разработки без каких-либо дополнительных усилий, например, разрабатывайте в симуляторе iOS или эмуляторе Android без сервисов Google Play.
- Пишите интеграционные тесты, не сталкиваясь с препятствиями в виде проверок безопасности, обычно применяемых к реальным телефонным номерам в производственной среде.
Вымышленные телефонные номера должны соответствовать следующим требованиям:
- Убедитесь, что вы используете вымышленные номера телефонов, которые еще не существуют. Firebase Authentication не позволяет использовать существующие номера телефонов, используемые реальными пользователями, в качестве тестовых номеров. Один из вариантов — использовать номера с префиксом 555 в качестве тестовых номеров телефонов США, например: +1 650-555-3434
- Номера телефонов должны быть правильно отформатированы с учетом длины и других ограничений. Они по-прежнему будут проходить ту же проверку, что и номера телефонов реальных пользователей.
- Для разработки можно добавить до 10 телефонных номеров.
- Используйте тестовые номера/коды телефонов, которые трудно угадать, и часто меняйте их.
Создавайте вымышленные номера телефонов и коды подтверждения.
- В консоли Firebase откройте раздел «Аутентификация» .
- На вкладке «Способ входа» включите оператора связи, если вы еще этого не сделали.
- Откройте раздел « Номера телефонов для тестирования аккордеонного меню».
- Укажите номер телефона, который вы хотите проверить, например: +1 650-555-3434 .
- Введите 6-значный проверочный код для этого конкретного номера, например: 654321 .
- Добавьте номер. При необходимости вы можете удалить номер телефона и его код, наведя курсор на соответствующую строку и нажав на значок корзины.
Ручное тестирование
Вы можете сразу начать использовать вымышленный номер телефона в своем приложении. Это позволяет проводить ручное тестирование на этапах разработки, не сталкиваясь с проблемами квот или ограничениями скорости. Вы также можете тестировать напрямую из симулятора iOS или эмулятора Android без установленных сервисов Google Play.
Когда вы указываете вымышленный номер телефона и отправляете код подтверждения, фактическое SMS-сообщение не отправляется. Вместо этого вам необходимо ввести ранее настроенный код подтверждения для завершения входа в систему.
После завершения авторизации создается пользователь Firebase с указанным номером телефона. Пользователь обладает теми же свойствами и поведением, что и пользователь с реальным номером телефона, и может получать доступ к Realtime Database / Cloud Firestore и другим сервисам таким же образом. Идентификационный токен, созданный в процессе авторизации, имеет ту же подпись, что и у пользователя с реальным номером телефона.
Другой вариант — установить тестовую роль для этих пользователей с помощью пользовательских утверждений , чтобы отличать их от фиктивных пользователей, если вы хотите дополнительно ограничить доступ.
Интеграционное тестирование
Помимо ручного тестирования, Firebase Authentication предоставляет API для написания интеграционных тестов для проверки аутентификации по телефону. Эти API отключают проверку приложения, например, требование reCAPTCHA в веб-версии и бесшумные push-уведомления в iOS. Это делает возможным автоматизированное тестирование в этих сценариях и упрощает его реализацию. Кроме того, они позволяют тестировать мгновенные сценарии проверки на Android.
На iOS перед вызовом verifyPhoneNumber необходимо установить параметр appVerificationDisabledForTesting в TRUE . Эта процедура выполняется без запроса токена APNs и отправки бесшумных push-уведомлений в фоновом режиме, что упрощает тестирование в симуляторе. Это также отключает резервный процесс reCAPTCHA.
Обратите внимание, что при отключенной проверке приложения использование реального номера телефона не позволит завершить вход в систему. С этим API можно использовать только вымышленные номера телефонов.
Быстрый
let phoneNumber = "+16505554567" // This test verification code is specified for the given test phone number in the developer console. let testVerificationCode = "123456" Auth.auth().settings.isAppVerificationDisabledForTesting = true PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) { verificationID, error in if let error = error { // Handles error self.handleError(error) return } let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "", verificationCode: testVerificationCode) Auth.auth().signIn(with: credential) { authResult, error in if let error = error { // Handles error self.handleError(error) return } _user = authResult.user }; };
Objective-C
NSString *phoneNumber = @"+16505554567"; // This test verification code is specified for the given test phone number in the developer console. NSString *testVerificationCode = @"123456"; [FIRAuth auth].settings.appVerificationDisabledForTesting = YES; [[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) { if (error) { // Handles error [self handleError:error]; return; } FIRAuthCredential *credential = [FIRPhoneAuthProvider credentialWithVerificationID:verificationID verificationCode:testVerificationCode]; [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { if (error) { // Handles error [self handleError:error]; return; } _user = user; }]; }];
Приложение: Использование входа в систему по телефону без подмены номера телефона.
Firebase Authentication использует подмену методов для автоматического получения токена APNs вашего приложения, обработки бесшумных push-уведомлений, отправляемых Firebase вашему приложению, и автоматического перехвата перенаправления пользовательской схемы со страницы проверки reCAPTCHA во время проверки.
Если вы предпочитаете не использовать подмену прокси (swizzling), вы можете отключить её, добавив флаг FirebaseAppDelegateProxyEnabled в файл Info.plist вашего приложения и установив для него значение NO . Обратите внимание, что установка этого флага в значение NO также отключает подмену прокси для других продуктов Firebase, включая Firebase Cloud Messaging .
Если вы отключите функцию подмены паролей (swizzling), вам необходимо явно передать токен устройства APNs, push-уведомления и URL-адрес перенаправления пользовательской схемы в Firebase Authentication .
Если вы разрабатываете приложение на SwiftUI, вам также следует явно передать токен устройства APNs, push-уведомления и URL-адрес перенаправления пользовательской схемы в Firebase Authentication .
Для получения токена устройства APNs реализуйте метод application(_:didRegisterForRemoteNotificationsWithDeviceToken:) и в нем передайте токен устройства методу setAPNSToken(_:type:) класса Auth .
Быстрый
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { // Pass device token to auth Auth.auth().setAPNSToken(deviceToken, type: .unknown) // Further handling of the device token if needed by the app // ... }
Objective-C
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // Pass device token to auth. [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd]; // Further handling of the device token if needed by the app. }
Для обработки push-уведомлений в application(_:didReceiveRemoteNotification:fetchCompletionHandler:): проверьте наличие уведомлений, связанных с аутентификацией Firebase, вызвав метод canHandleNotification(_:) класса Auth .
Быстрый
func application(_ application: UIApplication, didReceiveRemoteNotification notification: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { if Auth.auth().canHandleNotification(notification) { completionHandler(.noData) return } // This notification is not auth related; it should be handled separately. }
Objective-C
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // Pass notification to auth and check if they can handle it. if ([[FIRAuth auth] canHandleNotification:notification]) { completionHandler(UIBackgroundFetchResultNoData); return; } // This notification is not auth related; it should be handled separately. }
Для обработки URL-адреса перенаправления пользовательской схемы реализуйте метод application(_:open:options:) и в нем передайте URL-адрес методу canHandleURL(_:) класса Auth .
Быстрый
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { if Auth.auth().canHandle(url) { return true } // URL not auth related; it should be handled separately. }
Objective-C
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { if ([[FIRAuth auth] canHandleURL:url]) { return YES; } // URL not auth related; it should be handled separately. }
Если вы используете SwiftUI или UISceneDelegate , для обработки URL-адреса перенаправления реализуйте метод scene(_:openURLContexts:) и в них передавайте URL-адрес методу canHandleURL(_:) класса Auth .
Быстрый
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { for urlContext in URLContexts { let url = urlContext.url _ = Auth.auth().canHandle(url) } // URL not auth related; it should be handled separately. }
Objective-C
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts { for (UIOpenURLContext *urlContext in URLContexts) { [FIRAuth.auth canHandleURL:urlContext.url]; // URL not auth related; it should be handled separately. } }
Следующие шаги
После первого входа пользователя в систему создается новая учетная запись, которая связывается с учетными данными — то есть именем пользователя и паролем, номером телефона или информацией о поставщике аутентификации, — которые пользователь использовал для входа. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от способа входа пользователя.
В ваших приложениях вы можете получить основную информацию профиля пользователя из объекта
User. См. раздел «Управление пользователями» .В правилах безопасности Firebase Realtime Database и Cloud Storage вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной
authи использовать его для управления доступом пользователя к данным.
Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Для выхода из системы пользователя вызовите signOut: .
Быстрый
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Также может потребоваться добавить код обработки ошибок для всего спектра ошибок аутентификации. См. раздел «Обработка ошибок» .