p7xhMSO4O9fyfib8OANOxXym2LUEvDesKq0YUJbG

Memasang Fitur Login Authentication Firebase di Blogger

Membuat Fitur Login Authentication di Blogger
Membuat Fitur Login-Logout Authentication Firebase di Blogger

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.

  1. Buat halaman statis baru di blog kamu.
  2. Masuk ke tab HTML MODE.
  3. Kemudian salin dan tempel semua script di bawah ini.
    • HTML
    • CSS
    • JS
    <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 savedUser = localStorage.getItem('loggedInUser');
    const loginForm = document.getElementById('login_form');
    const exclusiveContent = document.getElementById('exclusive_content');
    
    if (savedUser) {
      const user = JSON.parse(savedUser);
      loginForm.style.display = 'none';
      exclusiveContent.style.display = 'block';
    
      displayExclusiveContent(user.uid);
    }
    
    function displayExclusiveContent(uid) {
      const usersRef = database.ref('users');
      usersRef.child(uid).once('value')
        .then(snapshot => {
          const userData = snapshot.val();
          const exclusiveContentHTML = `<p>Konten khusus member setelah login...</p>`;
          exclusiveContent.innerHTML = exclusiveContentHTML;
          exclusiveContent.style.display = 'block';
          loginForm.style.display = 'none';
        })
        .catch(error => {
          console.error('Error fetching user data:', 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);
    }
    
    function loginUser() {
      var email = document.getElementById("login_email").value;
      var password = document.getElementById("login_password").value;
    
      firebase.auth().signInWithEmailAndPassword(email, password)
        .then((userCredential) => {
          const user = userCredential.user;
    
          if (user.emailVerified) {
            igneliusLogin.console.log(user);
            showNotification(igneliusLogin.alert.loginSukses, 'success');
            localStorage.setItem('loggedInUser', JSON.stringify(user));
    
            displayExclusiveContent(user.uid);
          } else {
            showNotification(igneliusLogin.alert.emailNotVerified, 'error');
          }
        })
        .catch((error) => {
          let errorMessage = error.message;
    
          if (error.code === 'auth/invalid-email') {
            errorMessage = igneliusLogin.alert.invalidMail || "Email tidak valid.";
          } else if (error.code === 'auth/wrong-password') {
            errorMessage = "Password salah. Mohon periksa kembali password kamu.";
          } else if (error.code === 'auth/user-not-found') {
            errorMessage = "Email tidak terdaftar. Silakan daftar terlebih dahulu.";
          } else if (error.code === 'auth/internal-error') {
            if (errorMessage && errorMessage.includes('password is required')) {
              errorMessage = igneliusLogin.alert.invalidPW || "Mohon masukkan password yang sesuai.";
            } else {
              errorMessage = igneliusLogin.alert.errorPw || "Password yang kamu masukkan tidak sesuai. Periksa kembali password.";
            }
          } else {
            errorMessage = igneliusLogin.alert.loginError || "Terjadi kesalahan saat login.";
          }
          showNotification(igneliusLogin.alert.loginError, 'error');
        });
    }
    
    document.getElementById("login").addEventListener("click", loginUser);
    
    // 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.

  4. Selesai!

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.

Kenapa Tidak Pakai Login Akun Google?

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

2 komentar

Sebelum memposting komentar, harap baca kebijakan berkomentar terlebih dulu.

1. Untuk menulis kode syntax highlighter, gunakan <em>KODE SYNTAX</em> (kode harus di parse terlebih dulu).
2. Untuk menyisipkan gambar dalam komentar, gunakan <strong>URL GAMBAR</strong>.
3. Untuk menulis tautan, gunakan <a href='URL WEB TUJUAN'>Anchor Teks</a>.
4. Untuk menulis sebuah quote / kutipuan, gunakan <i rel="quote">TULIS QUOTE DI SINI</i>.
5. Centang Beri Tahu Saya untuk mendapatkan notifikasi yang dikirim langsung ke email saat ada yang membalas komentar kamu.

  • Han Farhan
    Han Farhan
    17 Agustus, 2024
    mantap lanjutkan terus bang soalnya autentikasi firebase blogger yg free dan lengkap kaya gini kayaknya baru di blog ini aja
    • Han Farhan
      Ignelius
      17 Agustus, 2024
      siap mas. terima kasih udah berkunjung. semoga bermanfaat 🙏🏻
    Reply