8/18/2018

Cara Mereset Kata Sandi Email dengan Firebase Authentication

8/18/2018


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.