Cara Mereset Kata Sandi Email dengan Firebase Authentication


Assalamualaikum Warahmatullahi Wabarakatuh.

Hallo sahabat programmer, ketemu lagi dengan saya, sebelumnya kita sudah memebahas beberapa tutorial mengenai sistem autentikasi menggunakan alamat email dan kata sandi dengan Firebase Authntication. Kali ini kita akan belajar bagaimana cara mereset password atau kata sandi user, karena banyak kasus pada user yang lupa mengenai kata sandi pada akun mereka, disini kita akan belajar bagaimana cara membuatnya.


Sebelum kalian memulai tutorial ini, saya sarankan kalian untuk mengikuti tutorial yang saya berikan sebelumnya, Karena project yang akan kita buat berkaitan dengan tutorial yang sudah saya buat sebelumnya mengenai autentikasi alamat email dan kata sandi.

Materi yang perlu kalian pelajari sebelumnya:
  1. Cara Melakukan Sign Up dengan Email dan Sandi pada Firebase Authentication
  2. Membuat Halaman Login dengan Email dan Sandi pada Firebase Authentication
  3. Cara Mengganti Kata Sandi Email dengan Firebase Authentication
  4. Cara Mengganti Alamat Email dengan Firebase Authentication

Untuk membuat sistem reset kata sandi pada email, caranya cukup mudah, kita hanya perlu menggunakan fungsi sendPasswordResetEmail() dari Firebase Authentication, dengan memasukan alamat email yang sudah terdaftar pada Gmail, jika berhasil, maka akan muncul pesan masuk pada email user untuk melakukan proses reset kata sandi.

Cara Mereset Kata Sandi Email dengan Firebase Authentication

1) Lalu buat activity baru bernama ResetPasswordActivity, activity ini digunakan sebagai halaman untuk mereset kata sandi dari user, dengan memasukan alamat email mereka.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cianjur.developer.net.firebaseexample.ResetPasswordActivity">

    <ImageView
        android:id="@+id/logo"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_marginTop="32dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.07999998"
        app:srcCompat="@drawable/firebase_auth"
        tools:ignore="ContentDescription" />

    <android.support.design.widget.TextInputLayout
        android:id="@+id/emailForm"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="32dp"
        android:layout_marginStart="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/logo">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/resetPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Maukan Email"
            tools:ignore="HardcodedText" />
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/reset"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="32dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="8dp"
        android:text="Reset Password"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/emailForm"
        tools:ignore="HardcodedText" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/reset"
        app:layout_constraintVertical_bias="0.13999999"
        tools:visibility="visible" />

</android.support.constraint.ConstraintLayout>
View:


2) Selanjutnya tambahkan menu baru kedalam LoginActivity, kita gunakan button saja biar lebih mudah, atau kalian dapat menyesuaikannya sendiri.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cianjur.developer.net.firebaseexample.LoginActivity">

    <ImageView
        android:id="@+id/logo"
        android:layout_width="120dp"
        android:layout_height="120dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.050000012"
        app:srcCompat="@drawable/firebase_auth"
        tools:ignore="ContentDescription" />

    <android.support.design.widget.TextInputLayout
        android:id="@+id/emailForm"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="32dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/logo">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/getEmail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Masukan Email"
            tools:ignore="HardcodedText" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/passwordForm"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="32dp"
        android:layout_marginStart="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/emailForm">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/getPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Password"
            tools:ignore="HardcodedText" />
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/login"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="4dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="8dp"
        android:text="Masuk"
        app:layout_constraintEnd_toStartOf="@+id/register"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/passwordForm"
        android:layout_marginLeft="32dp"
        android:layout_marginRight="4dp"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="32dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="8dp"
        android:text="Daftar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/login"
        app:layout_constraintTop_toBottomOf="@+id/passwordForm"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="32dp"
        tools:ignore="HardcodedText" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/resetPass"
        app:layout_constraintVertical_bias="0.100000024" />

    <Button
        android:id="@+id/resetPass"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="32dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="6dp"
        android:text="Reset Password"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/login"
        tools:ignore="HardcodedText" />

</android.support.constraint.ConstraintLayout>
View:


Janga lupa inisisalisasi dan tambahkan juga intent kedalam Button tersebut, untuk berpindah activity.

3) Selanjutnya buka class ResetPasswordActivity.java kalian, disini kita akan menggunakan fungsi sendPasswordResetEmail() untuk melakukan proses reset password, dengan memasukan alamat email pengguna.
package cianjur.developer.net.firebaseexample;

import android.support.annotation.NonNull;
import android.support.design.widget.TextInputEditText;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;

public class ResetPasswordActivity extends AppCompatActivity {

    //Deklarasi Variable
    private TextInputEditText myEmail;
    private Button ResetButtton;
    private ProgressBar progressBar;
    private FirebaseAuth user;
    private String getEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reset_password);

        //Inisialisasi Widget dan Membuat Objek dari FirebaeUser
        myEmail = findViewById(R.id.resetPassword);
        ResetButtton = findViewById(R.id.reset);
        progressBar = findViewById(R.id.progressBar);
        progressBar.setVisibility(View.GONE);
        user = FirebaseAuth.getInstance();

        ResetButtton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                progressBar.setVisibility(View.VISIBLE);
                getEmail = myEmail.getText().toString().trim();

                //Melakukan Proses Reset Password, dengan memasukan alamat email pengguna
                user.sendPasswordResetEmail(getEmail)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                //Mengecek status keberhasilan saat proses reset Password
                                if(task.isSuccessful()){
                                    Toast.makeText(ResetPasswordActivity.this, "Silakan Cek Inbox pada Email Anda", Toast.LENGTH_SHORT).show();
                                    finish();
                                }else {
                                    Toast.makeText(ResetPasswordActivity.this, "Terjadi Kesalahan, Silakan Coba Lagi", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            }
                        });
            }
        });
    }
}
Untuk mencobanya, siapkan alamat email yang telah terdaftar pada akun Gmail, lalu gunakan untuk mendaftar pada project aplikasi tersebut, lalau coba reset passwordnya, jika berhasil maka akan muncul pesan pada kotak masuk didalam email kalian, yang digunakan untuk melakukan proses reset password.

Demo:


Lalu klik pada link tersebut, maka akan muncul halaman untuk membut kata sandi baru, seperti berikut ini.



Terakhir kita akan belajar bagaimana cara menghapus akun pengguna yang telah daftar dan terautentikasi pada Firebase Auth, tutorialnya dapat kalian lihat disini.

Terimakasih atas kunjungannya, semoga tutorial yang saya berikan bisa bermanfaat untuk kalian semua, selebihnya, mohon maaf bila ada kesalahan.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.