Uwierzytelnianie Firebase
Logowanie za pomocą adresu e-mail i konta Google
Uwierzytelnianie Firebase to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Dlaczego Firebase Auth?
Firebase Authentication zajmuje się trudnymi elementami logowania użytkowników: bezpiecznym przechowywaniem haseł, odświeżaniem tokenów, odzyskiwaniem kont i obsługą wielu dostawców (e-mail, Google, Apple, telefon, tryb anonimowy).
Zamiast tworzyć serwery logowania, wywołujesz kilka interfejsów API i otrzymujesz zweryfikowany obiekt FirebaseUser. W tej lekcji skonfigurujesz logowanie za pomocą e-maila i hasła oraz Google.
Włączanie metod logowania
Zanim napiszesz kod, włącz wybranych dostawców w konsoli Firebase:
- Przejdź do Authentication → Sign-in method.
- Włącz opcję Email/Password.
- Włącz opcję Google (wybierz adres e-mail pomocy).
W przypadku logowania za pomocą Google musisz także dodać odcisk SHA-1 aplikacji w ustawieniach projektu, w przeciwnym razie logowanie zakończy się błędem deweloperskim.
Pobieranie instancji FirebaseAuth
Punktem wejścia jest Firebase.auth. Udostępnia on bieżącego użytkownika oraz metody tworzenia kont, logowania i wylogowywania.
Wartość auth.currentUser wynosi null, gdy nikt nie jest zalogowany — to szybki sposób na zdecydowanie, który ekran wyświetlić podczas uruchamiania aplikacji.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
val auth = Firebase.auth
fun isLoggedIn(): Boolean {
return auth.currentUser != null
}Utwórz konto
Zarejestruj nowego użytkownika za pomocą createUserWithEmailAndPassword. Zwraca ono obiekt Task, ale w kodzie opartym na korutynach można użyć na nim await() (z biblioteki kotlinx-coroutines-play-services).
Po pomyślnej rejestracji użytkownik zostaje od razu zalogowany.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await
suspend fun register(email: String, password: String): Result<Unit> {
return try {
Firebase.auth
.createUserWithEmailAndPassword(email, password)
.await()
Result.success(Unit)
} catch (e: Exception) {
Result.failure(e)
}
}Logowanie za pomocą adresu e-mail
Logowanie istniejącego użytkownika odbywa się za pomocą signInWithEmailAndPassword. Schemat jest taki sam jak w przypadku rejestracji.
Opakowanie wywołania w try/catch pozwala wyświetlać jasne komunikaty o błędach — nieprawidłowym haśle, nieistniejącym użytkowniku lub błędnym formacie adresu e-mail.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.google.firebase.auth.FirebaseUser
import kotlinx.coroutines.tasks.await
suspend fun login(email: String, password: String): FirebaseUser? {
val result = Firebase.auth
.signInWithEmailAndPassword(email, password)
.await()
return result.user
}Ekran logowania w Compose
Połącz uwierzytelnianie z niewielkim ekranem Compose. Przechowuj adres e-mail i hasło w stanie, wywołuj funkcje zawieszające z poziomu zakresu korutyn i wyświetlaj błędy.
@Composable
fun LoginScreen(onLoggedIn: () -> Unit) {
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var error by remember { mutableStateOf<String?>(null) }
val scope = rememberCoroutineScope()
Column(Modifier.padding(16.dp)) {
TextField(email, { email = it }, label = { Text("Email") })
TextField(password, { password = it }, label = { Text("Password") })
error?.let { Text(it, color = Color.Red) }
Button(onClick = {
scope.launch {
val user = login(email, password)
if (user != null) onLoggedIn() else error = "Login failed"
}
}) { Text("Sign in") }
}
}Odczytywanie bieżącego użytkownika
Obiekt FirebaseUser zawiera dane tożsamości: uid (stały unikalny identyfikator), email, displayName i photoUrl.
Używaj uid jako klucza podczas przechowywania danych tego użytkownika w Firestore — jego unikalność i niezmienność są gwarantowane.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun describeUser() {
val user = Firebase.auth.currentUser ?: return
println("UID: ${user.uid}")
println("Email: ${user.email}")
println("Name: ${user.displayName ?: "(none)"}")
}Obserwowanie stanu uwierzytelniania
Stan uwierzytelniania może zmienić się w dowolnym momencie (logowanie, wylogowanie, odświeżenie tokenu). Zarejestruj AuthStateListener, aby reagować na zmiany zamiast cyklicznie je sprawdzać.
To idealne rozwiązanie do automatycznego przechodzenia między ekranem logowania a ekranem głównym.
import com.google.firebase.Firebase
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.auth
val listener = FirebaseAuth.AuthStateListener { auth ->
val user = auth.currentUser
if (user == null) {
println("Signed out -> show login")
} else {
println("Signed in as ${user.email}")
}
}
// Attach and detach with lifecycle
Firebase.auth.addAuthStateListener(listener)
// Firebase.auth.removeAuthStateListener(listener)Logowanie przez Google za pomocą Credential Manager
Nowoczesnym sposobem logowania przez Google jest interfejs API Credential Manager. Pobierasz token identyfikatora Google, a następnie wymieniasz go na dane uwierzytelniające Firebase.
Najważniejszym krokiem jest utworzenie danych uwierzytelniających GoogleAuthProvider na podstawie zwróconego tokenu identyfikatora i przekazanie ich do signInWithCredential.
import com.google.firebase.Firebase
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await
suspend fun firebaseSignInWithGoogle(idToken: String) {
// idToken comes from Credential Manager / Google Identity
val credential = GoogleAuthProvider.getCredential(idToken, null)
Firebase.auth.signInWithCredential(credential).await()
}Wylogowywanie
Wylogowanie wymaga pojedynczego wywołania: auth.signOut(). Usuwa ono lokalnego użytkownika i wywołuje odbiornik stanu uwierzytelniania.
W przypadku logowania przez Google można także wyczyścić stan Credential Manager, aby przy następnym logowaniu pojawił się selektor. Po wylogowaniu currentUser przyjmuje wartość null.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun logout() {
Firebase.auth.signOut()
// currentUser is now null; your AuthStateListener fires
}Obsługa błędów uwierzytelniania
Błędy uwierzytelniania powodują zgłoszenie wyjątków określonego typu, które można obsługiwać warunkowo:
FirebaseAuthInvalidUserException— użytkownik nie istnieje lub jest wyłączony.FirebaseAuthInvalidCredentialsException— nieprawidłowe hasło lub błędny adres e-mail.FirebaseAuthUserCollisionException— adres e-mail jest już zarejestrowany.
Przekształcaj te wyjątki w przyjazne komunikaty zamiast wyświetlać surowe ślady stosu.
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException
import com.google.firebase.auth.FirebaseAuthUserCollisionException
fun messageFor(e: Throwable): String = when (e) {
is FirebaseAuthInvalidCredentialsException -> "Wrong email or password"
is FirebaseAuthUserCollisionException -> "That email is already in use"
else -> "Something went wrong, try again"
}Szybkie sprawdzenie
Chcesz automatycznie przełączać użytkownika między ekranem logowania a ekranem głównym za każdym razem, gdy się loguje lub wylogowuje. Jakie podejście będzie najwłaściwsze?
Podsumowanie: uwierzytelnianie
Potrafisz już uwierzytelniać użytkowników za pomocą Firebase:
- Włącz dostawców w konsoli i dodaj swój SHA-1 dla Google.
- Używaj
Firebase.authwraz zcreateUserWithEmailAndPassword/signInWithEmailAndPassword. - Logowanie przez Google: pobierz token identyfikatora, utwórz dane uwierzytelniające
GoogleAuthProvideri wywołajsignInWithCredential. - Odczytuj dane tożsamości za pomocą
currentUser(używajuidjako klucza danych). - Reaguj za pomocą AuthStateListener, a wylogowuj użytkownika za pomocą
signOut().
Dalej: przechowywanie danych użytkownika w Cloud Firestore.
Często zadawane pytania
Czy lekcja „Uwierzytelnianie Firebase” jest bezpłatna?
Tak — pełny tekst „Uwierzytelnianie Firebase” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Uwierzytelnianie Firebase”?
Logowanie za pomocą adresu e-mail i konta Google Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Uwierzytelnianie Firebase”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Konfiguracja Firebase
- Uwierzytelnianie Firebase
- Podstawy Cloud Firestore
- Wysyłanie za pomocą Cloud Messaging