Możesz użyć Firebase Authentication do uwierzytelniania użytkowników w Firebase za pomocą adresów e-mail i haseł oraz do zarządzania kontami w aplikacji chronionymi hasłem.
Zanim zaczniesz
Do instalacji zależności Firebase i do zarządzania nimi możesz używać menedżera pakietów Swift.
- Po otwarciu projektu aplikacji wybierz w Xcode opcję File > Add Packages (Plik > Dodaj pakiety).
- Gdy pojawi się prośba, dodaj repozytorium pakietu SDK Firebase na platformy Apple:
- Wybierz bibliotekę Firebase Authentication.
- Dodaj flagę
-ObjCdo sekcji Other Linker Flags (Inne flagi linkera) w ustawieniach kompilacji celu. - Gdy skończysz, Xcode zacznie automatycznie wyszukiwać i pobierać Twoje zależności w tle.
https://github.com/firebase/firebase-ios-sdk.git
Następnie wykonaj kilka czynności konfiguracyjnych:
- Jeśli nie masz jeszcze połączonej aplikacji z projektem w Firebase, zrób to w Firebase konsoli.
-
Włącz logowanie za pomocą adresu e-mail i hasła jako dostawcę logowania w projekcie Firebase:
- W konsoli Firebase otwórz Security (Zabezpieczenia) > Authentication (Uwierzytelnianie).
- Na karcie Sign-in method (Metoda logowania) włącz dostawcę logowania Email/password (Adres e-mail i hasło) provider.
- Kliknij Save (Zapisz).
Tworzenie konta chronionego hasłem
Aby utworzyć nowe konto użytkownika z hasłem, wykonaj te czynności w aktywności logowania w aplikacji:
- Zaimportuj moduł
FirebaseCorewUIApplicationDelegate, a także inne moduły Firebase, których używa delegat aplikacji. Na przykład, aby używać Cloud Firestore i Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Skonfiguruj
FirebaseAppwspółdzieloną instancję w metodzieapplication(_:didFinishLaunchingWithOptions:)delegata aplikacji:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go
do struktury
Appza pomocąUIApplicationDelegateAdaptorlubNSApplicationDelegateAdaptor. Musisz też wyłączyć swizzling delegata aplikacji. Więcej informacji znajdziesz w instrukcjach dotyczących SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- Gdy nowy użytkownik zarejestruje się za pomocą formularza rejestracji w aplikacji, wykonaj wszystkie kroki weryfikacji nowego konta wymagane przez aplikację, np. sprawdź, czy hasło nowego konta zostało wpisane prawidłowo i czy spełnia wymagania dotyczące złożoności wymagania.
- Utwórz nowe konto, przekazując adres e-mail i hasło nowego użytkownika
do
createUser.Jeśli nowe konto zostało utworzone, użytkownik jest zalogowany i możesz pobrać dane konta użytkownika z obiektu wyniku przekazanego do metody wywołania zwrotnego.Swift
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in // ... }
Objective-C
[[FIRAuth auth] createUserWithEmail:email password:password completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }];
Logowanie użytkownika za pomocą adresu e-mail i hasła
Czynności związane z logowaniem użytkownika za pomocą hasła są podobne do czynności związanych z tworzeniem nowego konta. W aktywności logowania w aplikacji wykonaj te czynności:
- Zaimportuj moduł
FirebaseCorewUIApplicationDelegate, a także inne moduły Firebase, których używa delegat aplikacji. Na przykład, aby używać Cloud Firestore i Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Skonfiguruj
FirebaseAppwspółdzieloną instancję w metodzieapplication(_:didFinishLaunchingWithOptions:)delegata aplikacji:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go
do struktury
Appza pomocąUIApplicationDelegateAdaptorlubNSApplicationDelegateAdaptor. Musisz też wyłączyć swizzling delegata aplikacji. Więcej informacji znajdziesz w instrukcjach dotyczących SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- Gdy użytkownik zaloguje się w aplikacji, przekaż jego adres e-mail i
hasło do
signIn.Jeśli użytkownik zaloguje się, możesz pobrać dane na koncie użytkownika z obiektu wyniku przekazanego do metody wywołania zwrotnego.Swift
Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in guard let strongSelf = self else { return } // ... }
Objective-C
[[FIRAuth auth] signInWithEmail:self->_emailField.text password:self->_passwordField.text completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }];
Zalecane: ustawienie zasad dotyczących haseł
Możesz zwiększyć bezpieczeństwo kont, egzekwując wymagania dotyczące złożoności haseł.
Aby skonfigurować zasady dotyczące haseł w projekcie, otwórz sekcję Password policy (Zasady dotyczące haseł) na karcie Security > Authentication > Settings (Zabezpieczenia > Uwierzytelnianie > Ustawienia) w konsoli Firebase Firebase:
Firebase Authentication zasady dotyczące haseł obsługują te wymagania dotyczące haseł:
Wymagany znak małej litery
Wymagany znak wielkiej litery
Wymagany znak numeryczny
Wymagany znak niealfanumeryczny
Wymaganie dotyczące znaku niealfanumerycznego spełniają te znaki:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~Minimalna długość hasła (od 6 do 30 znaków; domyślnie 6)
Maksymalna długość hasła (maksymalnie 4096 znaków)
Egzekwowanie zasad dotyczących haseł możesz włączyć w 2 trybach:
Wymagaj: próby rejestracji nie powiodą się, dopóki użytkownik nie zmieni hasła zgodnie z zasadami.
Notify (Powiadom): użytkownicy mogą się zarejestrować za pomocą hasła niezgodnego z zasadami. W tym trybie musisz sprawdzić, czy hasło użytkownika jest zgodne z zasadami po stronie klienta, i w jakiś sposób poprosić użytkownika o zaktualizowanie hasła, jeśli nie jest ono zgodne z zasadami.
Nowi użytkownicy zawsze muszą wybrać hasło zgodne z zasadami.
Jeśli masz aktywnych użytkowników, zalecamy, aby nie włączać wymuszenia aktualizacji przy logowaniu, chyba że chcesz zablokować dostęp użytkownikom, których hasła nie są zgodne z zasadami. Zamiast tego użyj trybu powiadamiania, który umożliwia użytkownikom logowanie się za pomocą bieżących haseł, i poinformuj ich o wymaganiach, których ich hasła nie spełniają.
Zalecane: włączenie ochrony przed wyliczaniem adresów e-mail
Niektóre metody Firebase Authentication przyjmujące adresy e-mail jako parametry zgłaszają określone błędy, jeśli adres e-mail jest niezarejestrowany, gdy powinien być zarejestrowany (np. podczas logowania za pomocą adresu e-mail i hasła), lub zarejestrowany gdy powinien być nieużywany (np. podczas zmiany adresu e-mail użytkownika). Może to być przydatne do sugerowania użytkownikom konkretnych rozwiązań, ale może też zostać wykorzystane przez złośliwych użytkowników do odkrywania adresów e-mail zarejestrowanych przez Twoich użytkowników.
Aby zmniejszyć to ryzyko, zalecamy włączenie ochrony przed wyliczaniem adresów e-mail
w projekcie za pomocą narzędzia Google Cloud gcloud. Pamiętaj, że włączenie tej
funkcji zmienia sposób raportowania błędów przez Firebase Authentication. Upewnij się, że Twoja aplikacja
nie korzysta z bardziej szczegółowych błędów.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania – nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania – za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane w projekcie w Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od sposobu logowania.
-
W aplikacjach możesz pobrać podstawowe informacje o profilu użytkownika z obiektu
User. Zobacz Zarządzanie użytkownikami. W regułach bezpieczeństwa Firebase Realtime Database i Cloud Storage bazy danych czasu rzeczywistego Firebase i Cloud Storage, możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej
auth, i użyć go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania przez połączenie danych logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj
signOut:.
Swift
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; }
Możesz też dodać kod obsługi błędów dla pełnego zakresu błędów uwierzytelniania. Zobacz Obsługa błędów.