Android Academy · Pelajaran

Pengesahan Firebase

Log masuk melalui e-mel dan Google.

Pelajaran 2 daripada 413 langkah

Pengesahan Firebase ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.

Mengapa Firebase Auth?

Firebase Authentication mengendalikan bahagian sukar dalam proses log masuk pengguna: penyimpanan kata laluan yang selamat, penyegaran token, pemulihan akaun dan pelbagai penyedia (e-mel, Google, Apple, telefon dan tanpa nama).

Daripada membina pelayan log masuk, anda hanya memanggil beberapa API dan mendapatkan FirebaseUser yang telah disahkan. Dalam pelajaran ini, anda akan melaksanakan e-mel/kata laluan dan log masuk Google.

Mendayakan Kaedah Log Masuk

Sebelum menulis kod, dayakan penyedia yang anda mahu dalam konsol Firebase:

  • Pergi ke Authentication → Sign-in method.
  • Aktifkan Email/Password.
  • Aktifkan Google (pilih e-mel sokongan).

Untuk log masuk Google, anda juga mesti menambahkan cap jari SHA-1 aplikasi dalam tetapan projek. Jika tidak, log masuk akan gagal dengan ralat pembangun.

Mendapatkan Instance FirebaseAuth

Titik masuknya ialah Firebase.auth. Ia menyediakan akses kepada pengguna semasa serta kaedah untuk mencipta akaun, log masuk dan log keluar.

auth.currentUser ialah null apabila tiada sesi log masuk — cara pantas untuk menentukan skrin yang perlu dipaparkan semasa pelancaran.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth

val auth = Firebase.auth

fun isLoggedIn(): Boolean {
    return auth.currentUser != null
}

Cipta Akaun

Daftarkan pengguna baharu dengan createUserWithEmailAndPassword. Ia mengembalikan Task, tetapi dalam kod coroutine, anda boleh menggunakan await() padanya (daripada kotlinx-coroutines-play-services).

Apabila berjaya, pengguna akan terus dilog masuk.

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

Log Masuk dengan E-mel

Untuk melog masuk pengguna sedia ada, gunakan signInWithEmailAndPassword. Strukturnya sama seperti pendaftaran.

Membungkus panggilan itu dalam try/catch membolehkan anda memaparkan ralat yang jelas — kata laluan salah, pengguna tidak wujud atau e-mel tidak sah.

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
}

Skrin Log Masuk dalam Compose

Integrasikan pengesahan ke dalam skrin Compose yang ringkas. Simpan e-mel dan kata laluan dalam keadaan, panggil fungsi suspend daripada skop coroutine dan paparkan ralat.

@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") }
    }
}

Membaca Pengguna Semasa

FirebaseUser menyimpan butiran identiti: uid (id unik yang stabil), email, displayName dan photoUrl.

Gunakan uid sebagai kunci apabila anda menyimpan data pengguna itu dalam Firestore — nilainya dijamin unik dan tidak berubah.

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)"}")
}

Memerhati Keadaan Pengesahan

Pengesahan boleh berubah pada bila-bila masa (log masuk, log keluar atau penyegaran token). Daftarkan AuthStateListener untuk bertindak balas, bukannya membuat tinjauan berkala.

Ini amat sesuai untuk beralih antara skrin log masuk dan skrin utama secara automatik.

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)

Log Masuk Google dengan Credential Manager

Cara moden untuk log masuk Google ialah menggunakan API Credential Manager. Anda meminta token ID Google, kemudian menukarnya kepada kelayakan Firebase.

Langkah pentingnya ialah membina kelayakan GoogleAuthProvider daripada token ID yang dikembalikan dan menghantarnya kepada 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()
}

Log Keluar

Untuk log keluar, hanya satu panggilan diperlukan: auth.signOut(). Ia mengosongkan pengguna setempat dan mencetuskan pendengar keadaan pengesahan anda.

Untuk log masuk Google, anda juga boleh mengosongkan keadaan Credential Manager supaya pemilih muncul pada kali seterusnya. Selepas log keluar, currentUser menjadi null.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth

fun logout() {
    Firebase.auth.signOut()
    // currentUser is now null; your AuthStateListener fires
}

Mengendalikan Ralat Pengesahan

Kegagalan pengesahan menghasilkan pengecualian bertipe yang boleh anda bezakan:

  • FirebaseAuthInvalidUserException — pengguna tidak wujud atau telah dilumpuhkan.
  • FirebaseAuthInvalidCredentialsException — kata laluan salah atau e-mel tidak sah.
  • FirebaseAuthUserCollisionException — e-mel telah didaftarkan.

Petakan pengecualian ini kepada mesej yang mudah difahami, bukannya memaparkan jejak tindanan mentah.

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

Semakan Pantas

Anda mahu menukar pengguna secara automatik antara skrin log masuk dan skrin utama setiap kali mereka log masuk atau log keluar. Apakah pendekatan yang paling kemas?

Imbas Kembali: Pengesahan

  • Dayakan penyedia dalam konsol; tambahkan SHA-1 anda untuk Google.
  • Gunakan Firebase.auth dengan createUserWithEmailAndPassword / signInWithEmailAndPassword.
  • Log masuk Google: dapatkan token ID, bina kelayakan GoogleAuthProvider dan panggil signInWithCredential.
  • Baca identiti melalui currentUser (gunakan uid sebagai kunci data anda).
  • Bertindak balas dengan AuthStateListener; log keluar dengan signOut().

Seterusnya: menyimpan data pengguna itu dalam Cloud Firestore.

Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
36
Pelajaran
152

Soalan Lazim

Adakah pelajaran “Pengesahan Firebase” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Pengesahan Firebase”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengesahan Firebase”?

Log masuk melalui e-mel dan Google. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Android Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pengesahan Firebase” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyediakan Firebase
  2. Pengesahan Firebase
  3. Asas Cloud Firestore
  4. Pemberitahuan Tolak dengan Cloud Messaging
← Kembali ke Android Academy