Mengautentikasi dengan Firebase menggunakan Akun Berbasis Sandi pada Android

Anda dapat menggunakan Firebase Authentication untuk mengizinkan pengguna melakukan autentikasi dengan Firebase menggunakan alamat email dan sandinya, serta untuk mengelola akun berbasis sandi pada aplikasi Anda.

Sebelum memulai

  1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.

  2. Jika Anda belum menghubungkan aplikasi ke project Firebase, lakukanlah dari Firebase console.
  3. Aktifkan login dengan Email/Sandi:
    1. Di Firebase console, buka bagian Auth.
    2. Di tab Sign-in method, aktifkan metode login Email/password dan klik Save.
  4. Dalam file Gradle modul (level aplikasi) (biasanya <project>/<app-module>/build.gradle.kts atau <project>/<app-module>/build.gradle), tambahkan dependensi untuk library Android Firebase Authentication. Sebaiknya gunakan Firebase Android BoM untuk mengontrol pembuatan versi library.

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth-ktx")
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth-ktx:22.1.2")
    }
    

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:22.1.2")
    }
    

Membuat akun berbasis sandi

Untuk membuat akun pengguna baru dengan sandi, lakukan langkah-langkah berikut pada aktivitas login aplikasi Anda:

  1. Dalam metode onCreate aktivitas pendaftaran, dapatkan instance bersama objek FirebaseAuth:

    Kotlin+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. Saat menginisialisasi Aktivitas Anda, periksa apakah pengguna saat ini sedang login:

    Kotlin+KTX

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        if (currentUser != null) {
            reload()
        }
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            reload();
        }
    }
  3. Ketika pengguna baru mendaftar menggunakan formulir pendaftaran aplikasi, selesaikan langkah-langkah validasi akun baru yang diwajibkan oleh aplikasi, antara lain memverifikasi bahwa sandi akun baru tersebut telah diketik dengan benar dan memenuhi persyaratan kerumitan.
  4. Buat akun baru dengan meneruskan alamat email dan sandi pengguna baru ke createUserWithEmailAndPassword:

    Kotlin+KTX

    auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "createUserWithEmail:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "createUserWithEmail:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "createUserWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "createUserWithEmail:failure", task.getException());
                        Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    Jika akun baru dibuat, pengguna juga akan diproses agar login. Dalam callback, Anda dapat menggunakan metode getCurrentUser untuk mendapatkan data akun pengguna.

Memproses login pengguna dengan alamat email dan sandi

Langkah-langkah untuk memproses login pengguna dengan sandi mirip dengan langkah-langkah untuk membuat akun baru. Di aktivitas login aplikasi Anda, lakukan hal berikut:

  1. Dalam metode onCreate aktivitas login, dapatkan instance bersama objek FirebaseAuth:

    Kotlin+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. Saat menginisialisasi Aktivitas Anda, periksa apakah pengguna saat ini sedang login:

    Kotlin+KTX

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        if (currentUser != null) {
            reload()
        }
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            reload();
        }
    }
  3. Ketika pengguna login ke aplikasi, teruskan alamat email dan sandi pengguna ke signInWithEmailAndPassword:

    Kotlin+KTX

    auth.signInWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInWithEmail:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInWithEmail:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithEmail:failure", task.getException());
                        Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    Jika login berhasil, Anda dapat menggunakan FirebaseUser yang ditampilkan untuk melanjutkan.

Direkomendasikan: Mengaktifkan perlindungan enumerasi email

Beberapa metode Firebase Authentication yang menggunakan alamat email sebagai parameter akan menampilkan error tertentu jika alamat email dibatalkan pendaftarannya ketika harus didaftarkan (misalnya, saat login dengan alamat email dan sandi), atau didaftarkan saat alamat tidak boleh digunakan (misalnya, saat mengubah alamat email pengguna). Meskipun error ini dapat berguna untuk menyarankan solusi tertentu kepada pengguna, hal ini juga dapat disalahgunakan oleh pelaku kejahatan untuk menemukan alamat email yang didaftarkan oleh pengguna.

Untuk mengurangi risiko ini, sebaiknya aktifkan perlindungan enumerasi email untuk project Anda menggunakan alat gcloud Google Cloud. Perlu diperhatikan bahwa mengaktifkan fitur ini akan mengubah perilaku pelaporan error Firebase Authentication. Jadi, pastikan aplikasi Anda tidak mengandalkan error yang lebih spesifik.

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.

  • Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FirebaseUser. Baca bagian Mengelola Pengguna.

  • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik milik pengguna yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.

Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Untuk memproses logout pengguna, panggil signOut:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();