Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Otentikasi dengan Firebase menggunakan Akun Berbasis Kata Sandi di Android

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Anda dapat menggunakan Firebase Authentication agar pengguna dapat mengautentikasi dengan Firebase menggunakan alamat email dan sandi mereka, dan untuk mengelola akun berbasis sandi aplikasi Anda.

Sebelum kamu memulai

  1. Jika Anda belum melakukannya, tambahkan Firebase ke proyek Android Anda .

  2. Jika Anda belum menghubungkan aplikasi ke proyek Firebase, lakukan dari konsol Firebase .
  3. Aktifkan masuk Email/Kata Sandi:
    1. Di konsol Firebase , buka bagian Auth .
    2. Pada tab Metode masuk , aktifkan metode masuk Email/sandi dan klik Simpan .
  4. Dalam file Gradle modul (level aplikasi) Anda (biasanya <project>/<app-module>/build.gradle ), tambahkan dependensi untuk library Android Firebase Authentication. Kami merekomendasikan penggunaan 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:31.2.0')
    
        // 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 pustaka Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

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

    Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, 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:21.1.0'
    }
    

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // 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 pustaka Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

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

    Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, 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:21.1.0'
    }
    

Buat akun berbasis kata sandi

Untuk membuat akun pengguna baru dengan sandi, selesaikan langkah-langkah berikut dalam aktivitas masuk aplikasi Anda:

  1. Dalam metode onCreate aktivitas pendaftaran Anda, dapatkan instance bersama dari 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 untuk melihat apakah pengguna saat ini masuk:

    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. Saat pengguna baru mendaftar menggunakan formulir pendaftaran aplikasi Anda, selesaikan setiap langkah validasi akun baru yang diperlukan aplikasi Anda, seperti memverifikasi bahwa kata sandi akun baru telah diketik dengan benar dan memenuhi persyaratan kerumitan Anda.
  4. Buat akun baru dengan mengirimkan alamat email dan kata 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 masuk. Dalam panggilan balik, Anda dapat menggunakan metode getCurrentUser untuk mendapatkan data akun pengguna.

Masuk pengguna dengan alamat email dan kata sandi

Langkah-langkah untuk memasukkan pengguna dengan kata sandi serupa dengan langkah-langkah untuk membuat akun baru. Dalam aktivitas masuk aplikasi Anda, lakukan hal berikut:

  1. Dalam metode onCreate aktivitas masuk Anda, dapatkan instance bersama dari 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 untuk melihat apakah pengguna saat ini masuk:

    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. Saat pengguna masuk ke aplikasi Anda, 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 proses masuk berhasil, Anda dapat menggunakan FirebaseUser yang dikembalikan untuk melanjutkan.

Direkomendasikan: Aktifkan perlindungan pencacahan email

Beberapa metode Firebase Authentication yang menggunakan alamat email sebagai parameter melontarkan kesalahan tertentu jika alamat email tidak terdaftar saat harus didaftarkan (misalnya, saat masuk dengan alamat email dan kata sandi), atau didaftarkan saat harus tidak digunakan (misalnya, saat mengubah alamat email pengguna). Meskipun hal ini berguna untuk menyarankan solusi khusus kepada pengguna, hal ini juga dapat disalahgunakan oleh pelaku jahat untuk menemukan alamat email yang didaftarkan oleh pengguna Anda.

Untuk memitigasi risiko ini, sebaiknya aktifkan perlindungan enumerasi email untuk project Anda menggunakan fitur gcloud Google Cloud. Perhatikan bahwa mengaktifkan fitur ini akan mengubah perilaku pelaporan kesalahan Firebase Authentication: pastikan aplikasi Anda tidak bergantung pada kesalahan yang lebih spesifik.

Langkah selanjutnya

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

  • Di aplikasi Anda, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FirebaseUser . Lihat Kelola Pengguna .

  • Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik pengguna yang masuk dari variabel auth , dan menggunakannya untuk mengontrol data apa yang dapat diakses pengguna.

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

Untuk mengeluarkan pengguna, panggil signOut :

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();