Fitur login authentication umumnya banyak digunakan di blog yang menggunakan WordPress dan memiliki self hosting untuk menyimpan data-data pengguna. Fitur login authentication ini tentunya sangat berguna jika kamu memiliki blog yang digunakan untuk jual beli produk atau blog toko online (e-commerce). Dengan memasang fitur login authentication di blog, kita dapat mengelola data dari setiap pengguna yang ingin membeli produk melalui blog dengan sangat mudah. Terlebih lagi jika produk yang dijual merupakan produk digital yang memiliki siklus update rutin. Sehingga kita dapat mengelola setiap pembaruan produk lebih mudah untuk semua pengguna sekaligus.
Nah, yang menjadi pertanyaannya, apakah bisa memasang fitur login authentication di blog yang menggunakan platform Blogger / blogspot? Jawabannya tentu saja bisa, walaupun prosesnya tidak semudah menginstal plugin di WordPress. Di artikel kali ini saya akan coba membahas sekaligus membagikan cara memasang fitur login authentication di Blogger. Fitur login authentication yang akan kita bahas kali ini menggunakan layanan authentication dan cloud database gratis dari Firebase. Sama seperti pembahasan sebelumnya tentang cara memasang fitur register autentikasi di blog menggunakan Firebase.
Cara Memasang Fitur Login Authentication Firebase di Blogger
Sebelum lanjut ke tutorial cara memasang fitur login authentication Firebase di Blogger, sebaiknya kamu baca dan ikuti terlebih dahulu tutorial yang ada di artikel sebelumnya yang membahas cara memasang fitur register authentication Firebase di Blogger. Karena semua langkah awal seperti pembuatan projek baru di Firebase, web app authentication serta pembuatan database Firebase baru ada di artikel tersebut.
Jadi kalau kamu belum memasang fitur register sebelumnya, kamu wajib baca dan ikuti terlebih dahulu tutorialnya di artikel yang berjudul cara memasang fitur register authentication Firebase di blog. Jika fitur register-nya sudah terpasang di blog kamu, mari kita lanjutkan dengan memasang fitur login authentication Firebase berikut ini di blog.
- Buat halaman statis baru di blog kamu.
- Masuk ke tab HTML MODE.
- Kemudian salin dan tempel semua script di bawah ini.
- HTML
- CSS
- JS
- Selesai!
<div id="exclusive_content"></div>
<div class="overlay-form"></div>
<form name="login_form" id="login_form">
<div class="form-group">
<input type="email" name="login_email" id="login_email" class="round" placeholder="Email..." />
</div>
<div class="form-group">
<input type="password" name="login_password" id="login_password" class="round" placeholder="Password..." />
</div>
<div id="reset-pw" onclick="showLupaPW()">Lupa Password?</div>
<button class="center round" type="button" id="login" name="login" class="btn btn-success">LOGIN</button>
</form>
<div id="overlay-form"></div>
<div id="reset_password_form">
<div class="form-reset">
<div class="title-login center">Reset Password</div>
<div class="desk-login center">Masukkan alamat email kamu yang terdaftar untuk mereset ulang password.</div>
<input type="email" class="round" id="reset_email" placeholder="Masukkan email yang terdaftar...">
<button class="round center" id="reset-btn" onclick="resetPassword()">Reset Password</button>
<div class="close-pw" onclick="tutupForm()">
<svg viewBox="0 0 24 24">
<path d="M12 22C17.5 22 22 17.5 22 12C22 6.5 17.5 2 12 2C6.5 2 2 6.5 2 12C2 17.5 6.5 22 12 22Z"></path>
<path d="M9.16998 14.83L14.83 9.17004"></path>
<path d="M14.83 14.83L9.16998 9.17004"></path>
</svg> Tutup
</div>
</div>
</div>
<div class="igneliusAlert"></div>
<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-database.js"></script>
<style>
/* CSS LOGIN-LOGOUT FIREBASE AUTHENTICATION BY IGNELIUS.COM */
.overflay-form, #overlay-form, #reset_password_form {
display: none;
position: fixed;
}
.overlay-form, #overlay-form {
background-color:rgba(0,0,0,.5);
backdrop-filter:blur(6px);
-webkit-backdrop-filter:blur(6px);
z-index:3;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
#reset_password_form {
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 90%;
}
form#login_form, #reset_password_form {
width: 100%;
height: auto;
margin: 1rem auto;
border-radius: 7px;
border: 1px solid #ccc;
background: #f2f2f2;
padding: 1rem 1.25rem;
z-index: 4;
}
form#login_form input, #reset_email {
width: 100%;
padding: 1rem 1.25rem;
margin: 10px auto;
border-radius: 7px;
border: 1px solid #ccc;
background: #f2f2f2;
}
button.center {
display: flex;
align-items: center;
text-align: center;
justify-content: center;
width: 100%;
margin: 10px auto;
}
.round {
border-radius: 7px;
}
#reset-pw {
font-size: 12px;
margin: 10px 0;
}
.igneliusAlert.success {
background-color: #d4edda;
color: #155724;
border-color: #c3e6cb;
}
.igneliusAlert.error {
background-color: #f8d7da;
color: #721c24;
border-color: #f5c6cb;
}
.igneliusAlert {
display: none;
position: fixed;
top: 3.5rem;
left: 50%;
width: 100%;
transform: translate(-50%, -50%);
padding: 1rem 1.25rem;
align-items: center;
text-align: center;
border: 1px solid #ccc;
border-radius: 7px;
background-color: #f2f2f2;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
z-index: 9;
}
</style>
<script>
/* SCRIPT LOGIN-LOGOUT FIREBASE AUTHENTICATION BY IGNELIUS.COM */
let igneliusLogin = {
alert: {
invalidMail: "Masukkan email dan password terlebih dulu!",
invalidPW: "Harap masukkan password terlebih dulu!",
errorPW: "Password tidak sesuai!",
emailNotVerified: "Email belum terverifikasi. Silakan verifikasi email Anda terlebih dahulu.",
loginSukses: "Berhasil login!",
loginError: "Login gagal",
invalidResetEmail: "Harap isi alamat email terlebih dahulu.",
notRegister: "Alamat email tidak terdaftar. Silakan daftar terlebih dahulu.",
resetSukses: "Permintaan reset password berhasil dikirim. Silakan cek email kamu."
}
};
const firebaseConfig = {
/* GANTI BAGIAN FIREBASE CONFIG INI DENGAN SCRIPT FIREBASE CONFIG KAMU */
};
const app = firebase.initializeApp(firebaseConfig);
const auth = firebase.auth();
const database = firebase.database();
const loginForm = document.getElementById('login_form');
const exclusiveContent = document.getElementById('exclusive_content');
// Periksa apakah ada user yang tersimpan di localStorage
const savedUser = localStorage.getItem('loggedInUser');
if (savedUser) {
const user = JSON.parse(savedUser);
loginForm.style.display = 'none';
displayExclusiveContent(user.uid);
}
function displayExclusiveContent(uid) {
const usersRef = firebase.database().ref('users');
usersRef.child(uid).once('value')
.then(snapshot => {
const userData = snapshot.val();
if (userData) {
const exclusiveContentHTML = `
<h2>Selamat Datang, ${userData.name || 'Member'}!</h2>
<p>Konten eksklusif hanya untuk kamu...</p><button id="logout">Logout</button>`; // Ganti bagian ini dengan konten HTML yang ingin ditampilkan setelah user login
exclusiveContent.innerHTML = exclusiveContentHTML;
exclusiveContent.style.display = 'block';
loginForm.style.display = 'none';
} else {
showNotification('Data user tidak ditemukan.', 'error');
}
})
.catch(error => {
showNotification('Terjadi kesalahan saat memuat data user.', 'error');
});
}
function showNotification(message, className) {
const notification = document.querySelector('.igneliusAlert');
notification.textContent = message;
notification.className = `igneliusAlert ${className}`;
notification.style.display = 'block';
setTimeout(() => {
notification.style.display = 'none';
}, 5000);
}
// login button
function loginUser() {
const email = document.getElementById("login_email").value;
const password = document.getElementById("login_password").value;
firebase.auth().signInWithEmailAndPassword(email, password)
.then((userCredential) => {
const user = userCredential.user;
if (user.emailVerified) {
showNotification("Login berhasil!", 'success');
localStorage.setItem('loggedInUser', JSON.stringify(user));
displayExclusiveContent(user.uid);
} else {
showNotification("Email belum diverifikasi. Mohon periksa email kamu.", 'error');
}
})
.catch((error) => {
let errorMessage = "Terjadi kesalahan saat login.";
switch (error.code) {
case 'auth/invalid-email':
errorMessage = "Email tidak valid. Periksa kembali email kamu.";
break;
case 'auth/wrong-password':
errorMessage = "Password salah. Mohon periksa kembali password kamu.";
break;
case 'auth/user-not-found':
errorMessage = "Email tidak terdaftar. Silakan daftar terlebih dahulu.";
break;
case 'auth/internal-error':
errorMessage = "Terjadi kesalahan internal. Periksa kembali data yang dimasukkan.";
break;
default:
errorMessage = error.message;
}
showNotification(errorMessage, 'error');
});
}
document.getElementById("login").addEventListener("click", loginUser);
// logout button
function logoutUser() {
firebase.auth().signOut()
.then(() => {
// Hapus data user dari localStorage
localStorage.removeItem('loggedInUser');
// Tampilkan pesan logout berhasil
showNotification('Logout berhasil. Sampai jumpa!', 'success');
// Sembunyikan konten eksklusif dan tampilkan form login
exclusiveContent.style.display = 'none';
loginForm.style.display = 'block';
// Opsional: redirect ke halaman login
// window.location.href = '/p/login.html';
})
.catch((error) => {
showNotification('Terjadi kesalahan saat logout. Coba lagi.', 'error');
});
}
// Tambahkan event listener pada tombol logout
document.getElementById('logout').addEventListener('click', logoutUser);
// reset password
function resetPassword() {
var resetEmail = document.getElementById("reset_email").value;
if (!resetEmail) {
showNotification(igneliusLogin.alert.invalidResetEmail, 'error');
return;
}
const userRef = firebase.database().ref('users');
userRef.orderByChild('email').equalTo(resetEmail).once('value')
.then(snapshot => {
if (snapshot.exists()) {
firebase.auth().sendPasswordResetEmail(resetEmail)
.then(() => {
showNotification(igneliusLogin.alert.resetSukses, 'success');
document.getElementById("reset_password_form").style.display = 'none';
document.getElementById("overlay-form").style.display = 'none';
})
.catch((error) => {
const errorMessage = error.message || "Gagal mengirim permintaan reset password. Silakan coba lagi.";
igneliusLogin.console.error(errorMessage);
showNotification(errorMessage, 'error');
});
} else {
showNotification(igneliusLogin.alert.notRegister, 'error');
}
})
.catch((error) => {
const errorMessage = "Terjadi kesalahan saat memeriksa email: " + error.message;
igneliusLogin.console.error(errorMessage);
showNotification(errorMessage, 'error');
});
}
function showLupaPW() {
var form = document.getElementById("reset_password_form");
var overlay = document.getElementById("overlay-form");
form.style.display = 'block';
overlay.style.display = 'block';
}
document.getElementById("reset_password").addEventListener("click", resetPassword);
document.getElementById("forgot_password_link").addEventListener("click", showLupaPW);
function showPassword() {
var e = document.getElementById("login_password");
"password" === e.type ? e.type = "text" : e.type = "password";
}
function tutupForm() {
document.getElementById("overlay-form").style.display = "none";
document.getElementById("reset_password_form").style.display = "none";
}
</script>
Pertahikan pada tab JavaScript (JS) di bagian const exclusiveContent = `...`;
. Itu adalah bagian untuk menampilkan konten ketika pengguna sudah berhasil login. Kamu bisa ganti bagian itu. Dan untuk penulisannya mengunakan HTML seperti biasa.
Fungsi Tambahan dari Fitur Login Authentication Firebase
Dari JavaScript login-logout authentication Firebase di atas, saya juga menambahkan fungsi request reset password apabila ada user yang lupa dengan password akun mereka. Untuk mereset ulang password, user tinggal mengklik tombol "Lupa Password?" kemudian memasukkan data email user yang terdaftar. Jika email yang user masukkan valid dan terdaftar di database, Firebase akan langsung mengirimkan email konfirmasi berisi link untuk mereset atau mengatur ulang kata sandi user.
Fungsi reset ulang kata sandi bisa saja tidak berfungsi jika pengaturan pada script rules di Firebase tidak sesuai (lihat pada poin nomor dua dan langkah nomor tiga). Jadi pastikan bahwa penulisan script rules database yang ada di Firebase benar.
Selain itu, saya juga menambahkan fungsi validasi email user. Jika email user belum terverifikasi, user tidak dapat login menggunakan email tersebut. Tapi jika email sudah berhasil diverifikasi, user dapat menggunakan email tersebut untuk login.
Karena artikel ini sebetulnya merupakan lanjutan dari pembahasan sebelumnya. Dan di pembahasan sebelumnya (fitur register authentication Firebase) menggunakan metode Email dan Password, bukan menggunakan metode Akun Google. Jika ingin menambahkan metode login dengan akun Google kamu harus menambahkan metode akun Google pada provider authentication Firebase kamu dan menyesuaikan kembali JavaScript. Mungkin kedepannya akan saya update lagi secara bertahap dan menambahkan metode login menggunakan akun Google. Ditunggu saja pembaruannya.
Penutup
Itu dia tutorial cara membuat fitur login autentikasi di Blogger menggunakan Firebase. Script yang saya bagikan di atas tentunya hanya fungsi login-logout sederhana saja. Kamu bisa tambahkan lebih banyak fungsional ke dalam JavaScript sesuai dengan kebutuhan masing-masing. Misalnya saja seperti membuat halaman khusus untuk memuat data-data pribadi user atau data pembelian produk user. Atau jika ingin lebih spesifik, kamu juga bisa tambahkan autentikasi data user untuk mengakses halaman ekslusif khusus member premium. Bebas saja, kreasikan script sesuai kreatifitas dan kebutuhan kamu masing-masing.
2 komentar