Beranda Coding Authentication Flutter: Login, Token, dan Backend
CodingFlutter

Authentication Flutter: Login, Token, dan Backend

Pelajari authentication dan backend Flutter dari nol, mulai dari registrasi, login, logout, session management, token, REST API, Firebase Authentication, hingga keamanan aplikasi.

Bagikan
authentication flutter
Bagikan

Aplikasi Flutter yang dapat menyimpan data lokal atau mengambil informasi dari REST API merupakan fondasi yang baik untuk mulai mengembangkan aplikasi nyata. Namun, banyak aplikasi membutuhkan kemampuan tambahan, seperti mengenali identitas pengguna, menyediakan fitur login, menyimpan profil, serta membatasi akses terhadap data tertentu.

Contohnya, aplikasi manajemen karyawan membutuhkan akun untuk admin dan staf. Aplikasi e-commerce memerlukan identitas pelanggan agar keranjang belanja dan riwayat pesanan dapat dikaitkan dengan pengguna yang tepat. Sementara itu, aplikasi pencatatan keuangan perlu memastikan bahwa data setiap pengguna tidak dapat diakses oleh orang lain.

Kebutuhan tersebut berkaitan dengan dua konsep penting, yaitu authentication dan backend.

Dalam Roadmap Belajar Flutter dari Nol Sampai Siap Kerja, Level 11 menjadi kelanjutan dari Level 10 — Mulai Membuat Aplikasi Flutter Nyata. Pada tahap sebelumnya, Anda telah berlatih membangun aplikasi melalui proyek seperti To-Do List, Notes, Weather, News, Expense Tracker, dan aplikasi manajemen bisnis.

Sekarang, Anda akan mempelajari bagaimana aplikasi Flutter terhubung dengan sistem yang dapat mengelola identitas pengguna, memproses permintaan, menyimpan data terpusat, dan menerapkan kontrol akses.

Artikel ini membahas konsep authentication, registrasi, login, logout, session management, token, REST API, backend, Firebase Authentication, keamanan dasar, hingga proyek latihan yang dapat digunakan untuk memperkuat portofolio.

Apa Itu Authentication dalam Flutter?

Authentication atau autentikasi adalah proses memverifikasi identitas seseorang atau suatu entitas yang ingin menggunakan sistem.

Dalam aplikasi mobile, proses ini biasanya dilakukan ketika pengguna memasukkan email dan password, menggunakan nomor telepon, atau memilih metode login lain yang didukung aplikasi.

Misalnya, ketika membuka aplikasi pengelolaan karyawan, pengguna diminta memasukkan email dan password. Sistem memeriksa kredensial tersebut, kemudian menentukan apakah identitas pengguna berhasil diverifikasi.

Jika berhasil, aplikasi dapat menampilkan halaman utama dan informasi yang sesuai dengan akun tersebut. Jika gagal, aplikasi memberikan pesan kesalahan yang tepat.

Authentication berbeda dengan authorization

Kedua istilah ini sering dianggap sama, padahal memiliki fungsi berbeda.

AspekAuthenticationAuthorization
TujuanMemverifikasi identitasMenentukan hak akses
PertanyaanSiapa pengguna ini?Apa yang boleh dilakukan pengguna ini?
ContohLogin menggunakan email dan passwordAdmin boleh mengelola data karyawan
Waktu penerapanKetika identitas diverifikasi dan sesi dikelolaKetika pengguna mengakses sumber daya atau menjalankan tindakan

Sebagai contoh, pengguna berhasil login ke aplikasi perusahaan. Hal tersebut tidak otomatis berarti ia boleh menghapus data karyawan atau mengakses laporan rahasia.

Sistem tetap perlu memeriksa hak aksesnya. Pemeriksaan tersebut harus dilakukan di backend, bukan hanya dengan menyembunyikan tombol pada antarmuka Flutter.

Memahami Backend dalam Pengembangan Flutter

Backend adalah bagian aplikasi yang berjalan di server atau infrastruktur di luar perangkat pengguna. Backend menangani berbagai proses yang tidak seharusnya hanya mengandalkan kode di aplikasi mobile.

Tanggung jawab backend dapat mencakup:

  • Memproses permintaan dari aplikasi Flutter.
  • Memverifikasi identitas pengguna.
  • Memeriksa hak akses.
  • Menjalankan aturan bisnis.
  • Mengelola data melalui database server.
  • Menghasilkan respons API.
  • Mencatat aktivitas dan menangani kesalahan.
  • Mengintegrasikan layanan eksternal sesuai kebutuhan.

Sementara itu, Flutter bertanggung jawab atas antarmuka, interaksi pengguna, pengelolaan state di sisi aplikasi, dan komunikasi dengan backend.

Bagaimana Flutter berkomunikasi dengan backend?

Secara umum, prosesnya seperti berikut:

  1. Pengguna melakukan tindakan di aplikasi Flutter.
  2. Aplikasi mengirim HTTP request ke endpoint backend.
  3. Backend memvalidasi permintaan dan memproses aturan bisnis.
  4. Backend berkomunikasi dengan database atau layanan lain jika diperlukan.
  5. Backend mengembalikan HTTP response, umumnya berupa JSON.
  6. Flutter memproses respons dan memperbarui UI.

Sebagai contoh, ketika pengguna ingin melihat profilnya, Flutter dapat mengirim permintaan GET /api/profile. Backend memverifikasi token dan hak akses, kemudian mengembalikan informasi profil yang boleh dilihat pengguna tersebut.

Penting: aplikasi Flutter bukan tempat untuk menyimpan kredensial database server atau rahasia backend. Kode aplikasi mobile dapat diperiksa, sehingga akses sensitif harus dikendalikan melalui infrastruktur server yang sesuai.

Mengenal Jenis Backend untuk Flutter

Ada beberapa pendekatan yang dapat digunakan untuk membangun backend aplikasi Flutter.

Custom REST API

Pada pendekatan ini, Anda membuat backend sendiri menggunakan teknologi server, misalnya PHP, Laravel, Node.js, Python, atau framework lain.

Backend menyediakan endpoint untuk menangani login, registrasi, pengelolaan profil, dan data aplikasi.

Contoh endpoint sederhana:

MethodEndpointFungsi
POST/api/registerMembuat akun baru
POST/api/loginMemverifikasi kredensial
POST/api/logoutMengakhiri sesi sesuai mekanisme backend
GET/api/profileMengambil profil pengguna
PUT/api/profileMemperbarui profil
GET/api/tasksMengambil daftar tugas milik pengguna

Endpoint tersebut hanyalah contoh rancangan. Implementasi sebenarnya bergantung pada API yang Anda bangun.

Kelebihan custom backend adalah fleksibilitas dalam mengatur struktur database, aturan bisnis, integrasi layanan, dan hak akses. Namun, Anda juga bertanggung jawab terhadap validasi, keamanan, deployment, monitoring, dan pemeliharaan server.

Backend-as-a-Service (BaaS)

BaaS menyediakan layanan backend siap pakai sehingga pengembang tidak harus membangun seluruh infrastruktur dari awal.

Salah satu contoh yang populer adalah Firebase, yang menyediakan layanan seperti Authentication, database, penyimpanan file, dan berbagai layanan pendukung aplikasi. Dokumentasi resmi tentang Firebase Flutter dapat menjadi titik awal untuk mempelajarinya.

Baca juga:  Dasar Pemrograman Sebelum Belajar Flutter untuk Pemula

Pendekatan ini cocok untuk belajar autentikasi, membuat prototipe, dan membangun aplikasi yang memerlukan layanan backend terkelola.

Meski demikian, BaaS bukan berarti Anda tidak perlu memikirkan keamanan. Aturan akses data, konfigurasi layanan, dan validasi operasi tetap harus dirancang dengan benar.

Mana yang sebaiknya dipelajari terlebih dahulu?

Untuk pemula, pilih satu jalur implementasi terlebih dahulu agar konsepnya tidak tercampur.

  • Gunakan Firebase Authentication untuk mempelajari alur autentikasi dengan layanan terkelola.
  • Gunakan custom REST API jika ingin memahami komunikasi Flutter dengan backend yang Anda kendalikan sendiri.
  • Pelajari keduanya secara bertahap setelah memahami konsep identitas, sesi, token, dan hak akses.

Tujuan utama Level 11 bukan menguasai semua teknologi backend sekaligus, melainkan memahami hubungan antara aplikasi Flutter dan sistem autentikasi.

Membuat Fitur Registrasi Pengguna

Registrasi atau sign-up adalah proses pembuatan akun baru.

Pada aplikasi yang menggunakan email dan password, formulir registrasi biasanya berisi nama, email, password, dan konfirmasi password jika diperlukan.

Sebelum mengirim data, aplikasi perlu memeriksa kelengkapan input dan memberikan umpan balik yang mudah dipahami.

Langkah membuat registrasi

  1. Buat halaman registrasi menggunakan widget Flutter.
  2. Tambahkan input untuk email dan password.
  3. Validasi format email dan kebijakan password.
  4. Kirim permintaan pembuatan akun melalui SDK autentikasi atau endpoint backend.
  5. Tangani respons berhasil dan gagal.
  6. Arahkan pengguna ke halaman yang sesuai setelah registrasi berhasil.

Validasi pada Flutter meningkatkan pengalaman pengguna, tetapi bukan pengganti validasi server. Backend atau layanan autentikasi tetap harus memeriksa data yang diterima.

Contoh registrasi dengan Firebase Authentication

Jika Anda memilih Firebase, tambahkan dependensi melalui terminal:

flutter pub add firebase_auth

Pastikan proyek Firebase telah dibuat dan aplikasi Flutter sudah dikonfigurasi sesuai dokumentasi resmi.

Contoh fungsi registrasi:

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> registerUser({
  required String email,
  required String password,
}) async {
  return FirebaseAuth.instance
      .createUserWithEmailAndPassword(
    email: email.trim(),
    password: password,
  );
}

Fungsi tersebut memperlihatkan cara memanggil layanan registrasi. Dalam aplikasi yang lebih lengkap, tambahkan validasi formulir dan penanganan error agar kegagalan tidak menyebabkan aplikasi berhenti secara tidak terduga.

Firebase Authentication menyediakan metode createUserWithEmailAndPassword() untuk membuat akun menggunakan email dan password. Setelah akun berhasil dibuat, pengguna biasanya juga berada dalam kondisi login, pelajari panduan registrasi email dan password Firebase Authentication untuk Flutter.

Membuat Fitur Login

Login atau sign-in digunakan untuk memverifikasi kredensial pengguna yang telah memiliki akun.

Pada aplikasi email dan password, Flutter mengirimkan kredensial melalui SDK autentikasi atau ke endpoint backend yang dirancang untuk memproses login.

Alur login yang perlu dipahami

  • Pengguna memasukkan email dan password.
  • Aplikasi memvalidasi input.
  • Kredensial dikirim melalui mekanisme autentikasi.
  • Sistem memverifikasi kredensial.
  • Jika berhasil, sistem menetapkan atau memperbarui status autentikasi.
  • Aplikasi menampilkan halaman yang sesuai dengan status pengguna.
  • Jika gagal, aplikasi memberikan pesan kesalahan yang aman dan mudah dipahami.

Contoh login menggunakan Firebase

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> loginUser({
  required String email,
  required String password,
}) async {
  return FirebaseAuth.instance
      .signInWithEmailAndPassword(
    email: email.trim(),
    password: password,
  );
}

Contoh tersebut hanya menangani pemanggilan autentikasi. UI perlu menangani kondisi loading, keberhasilan, dan kegagalan secara terpisah.

Hindari menampilkan detail internal sistem kepada pengguna. Pesan seperti “Email atau password tidak valid” biasanya lebih tepat daripada membocorkan informasi teknis yang tidak diperlukan.

Menangani error login

Kesalahan dapat muncul karena kredensial tidak valid, jaringan bermasalah, konfigurasi belum benar, atau metode login belum diaktifkan.

Pada Firebase Authentication, Anda dapat menangani FirebaseAuthException dan memeriksa kode error yang relevan.

try {
  await loginUser(
    email: email,
    password: password,
  );
} on FirebaseAuthException catch (e) {
  // Petakan kode error ke pesan yang aman
  // dan mudah dipahami pengguna.
} catch (e) {
  // Tangani kegagalan tak terduga.
}

Kode ini merupakan kerangka penanganan error, bukan implementasi halaman login lengkap. Detail penanganan dapat dipelajari melalui dokumentasi error Firebase Authentication.

Memahami Session Management

Setelah pengguna berhasil login, aplikasi perlu mengetahui apakah pengguna masih memiliki sesi autentikasi yang valid.

Proses mengelola status tersebut disebut session management.

Contohnya, pengguna membuka aplikasi pada pagi hari, login, lalu menutup aplikasi. Ketika aplikasi dibuka kembali, aplikasi mungkin masih dapat mengenali sesi sebelumnya tanpa meminta pengguna memasukkan kredensial lagi.

Perilaku ini bergantung pada mekanisme autentikasi yang digunakan, kebijakan sesi, masa berlaku kredensial, dan platform.

Status autentikasi dalam aplikasi

Setidaknya, aplikasi perlu membedakan beberapa keadaan berikut:

  • Unauthenticated: pengguna belum login atau tidak memiliki sesi yang valid.
  • Authenticating: proses login sedang berlangsung.
  • Authenticated: pengguna memiliki sesi yang valid.
  • Session expired: sesi tidak lagi dapat digunakan dan perlu ditangani sesuai kebijakan sistem.

Status tersebut dapat dikelola melalui state management yang telah dipelajari pada Level 7.

Pada Firebase, authStateChanges() menyediakan stream untuk mengamati perubahan status autentikasi. Firebase Authentication juga menyediakan mekanisme persistensi status autentikasi sesuai platform.

Apa yang terjadi ketika sesi berakhir?

Jika backend menggunakan token yang memiliki masa berlaku, aplikasi perlu menangani kondisi ketika token sudah tidak valid.

Tergantung pada desain sistem, aplikasi dapat mencoba memperbarui token melalui mekanisme resmi, meminta pengguna login kembali, atau mengarahkan pengguna ke halaman autentikasi.

Jangan mengasumsikan bahwa status login yang tersimpan secara lokal selalu berarti sesi masih valid. Backend tetap menjadi pihak yang menentukan apakah permintaan yang dilindungi dapat diterima.

Memahami Access Token dan Refresh Token

Dalam sistem autentikasi berbasis token, server atau layanan autentikasi dapat memberikan token setelah pengguna berhasil login.

Token digunakan sesuai rancangan protokol untuk menyampaikan bukti autentikasi atau otorisasi ketika aplikasi melakukan permintaan berikutnya.

Baca juga:  Clean Code dan Arsitektur Flutter untuk Pemula

Access token

Access token umumnya digunakan untuk mengakses endpoint yang dilindungi. Token dikirim sesuai mekanisme autentikasi API, yang sering kali menggunakan header HTTP Authorization.

Contoh format header:

Authorization: Bearer ACCESS_TOKEN

ACCESS_TOKEN di atas hanyalah placeholder, bukan token yang dapat digunakan.

Refresh token

Pada arsitektur yang menggunakan refresh token, kredensial ini digunakan untuk memperoleh access token baru sesuai kebijakan server dan protokol yang diterapkan.

Tidak semua sistem menggunakan refresh token dengan mekanisme yang sama. Sebagian SDK mengelola proses penyegaran kredensial secara otomatis, sedangkan custom backend mungkin membutuhkan implementasi khusus.

Hal penting tentang token

  1. Token tidak boleh dianggap sebagai teks biasa yang aman untuk dibagikan.
  2. Token yang dicuri dapat disalahgunakan sesuai kewenangannya.
  3. Masa berlaku, pencabutan, dan pembaruan token harus dirancang sesuai kebutuhan keamanan.
  4. Jangan memasukkan token ke log, laporan error, atau repository publik.
  5. Penyimpanan kredensial sensitif harus menggunakan mekanisme yang sesuai dengan platform.

Jika Anda membangun aplikasi menggunakan Firebase Authentication, pelajari mekanisme token yang disediakan SDK terlebih dahulu sebelum mencoba mengelolanya secara manual.

Menghubungkan Flutter dengan REST API yang Membutuhkan Login

Pada Level 8, Anda telah mempelajari cara mengambil data melalui REST API Flutter. Pada Level 11, Anda melanjutkan ke API yang hanya dapat diakses setelah pengguna terautentikasi.

Misalnya, endpoint berikut digunakan untuk mengambil profil:

GET /api/profile
Authorization: Bearer ACCESS_TOKEN

Backend memverifikasi token, menentukan identitas pengguna, memeriksa izin yang dibutuhkan, kemudian mengembalikan profil yang sesuai.

Contoh respons JSON:

{
  "id": 101,
  "name": "Budi",
  "email": "budi@example.com"
}

Respons tersebut hanya contoh struktur data. API sebenarnya dapat menggunakan format dan atribut berbeda.

Alur integrasi API terautentikasi

  1. Pengguna login melalui mekanisme yang disediakan.
  2. Aplikasi memperoleh status atau kredensial autentikasi yang diperlukan.
  3. Aplikasi mengirim request ke endpoint yang dilindungi.
  4. Backend memverifikasi kredensial dan hak akses.
  5. Backend mengembalikan data atau respons error.
  6. Flutter memproses hasil dan memperbarui UI.

Dalam implementasi yang terstruktur, pisahkan kode HTTP ke service dan pengelolaan sumber data ke repository. Dengan demikian, halaman UI tidak perlu mengurus detail header autentikasi, parsing JSON, dan penanganan respons secara langsung.

Dokumentasi resmi Flutter merekomendasikan pemisahan UI dan data layer serta penggunaan service dan repository untuk membantu menjaga kode tetap mudah dirawat dan diuji, silahkan baca panduan arsitektur aplikasi Flutter.

Membuat Fitur Logout

Logout digunakan untuk mengakhiri sesi pengguna sesuai mekanisme autentikasi yang diterapkan.

Pada Firebase Authentication, proses logout dapat dilakukan melalui:

await FirebaseAuth.instance.signOut();

Setelah status autentikasi berubah, aplikasi perlu menampilkan halaman yang sesuai, misalnya halaman login.

Untuk custom backend, proses logout bergantung pada desain sesi. Jika backend menggunakan token stateless, sekadar menghapus token dari aplikasi tidak selalu langsung membatalkan token yang sudah diterbitkan di server. Sistem yang membutuhkan pencabutan segera perlu menerapkan mekanisme yang mendukung kebutuhan tersebut.

Ketika logout dilakukan, pastikan aplikasi juga menangani data pengguna yang tersimpan di memori. Misalnya, data profil, informasi privat, dan cache khusus pengguna tidak boleh tetap ditampilkan kepada pengguna berikutnya pada perangkat yang sama.

Logout bukan hanya memindahkan pengguna ke halaman login. Proses tersebut harus mengakhiri akses lokal sesuai kebutuhan dan mengikuti kebijakan autentikasi backend.

Mengelola Profil dan Hak Akses Pengguna

Setelah autentikasi berjalan, aplikasi biasanya memerlukan profil untuk menyimpan informasi seperti nama, email, foto profil, atau preferensi pengguna.

Pisahkan identitas autentikasi dari data profil aplikasi. Sistem autentikasi bertanggung jawab memverifikasi identitas, sedangkan backend atau database aplikasi dapat menyimpan atribut profil dan informasi bisnis yang relevan.

Contoh peran pengguna

Dalam aplikasi manajemen karyawan, misalnya, terdapat dua peran:

  • Admin: mengelola data karyawan sesuai izin yang diberikan.
  • Karyawan: melihat profil dan informasi yang memang boleh diaksesnya.

Ketika pengguna login, aplikasi dapat menampilkan menu berdasarkan peran yang diterima dari sumber tepercaya. Namun, tampilan menu hanya membantu pengalaman pengguna; backend harus tetap memvalidasi hak akses pada setiap endpoint yang dilindungi.

Jangan menganggap nilai isAdmin yang dibuat atau diubah oleh aplikasi Flutter sebagai bukti otorisasi yang sah. Pengguna dapat memodifikasi aplikasi atau request yang dikirimkan. Hak akses harus ditentukan berdasarkan data dan aturan yang dipercaya oleh server.

Keamanan Dasar Authentication dan Backend

Keamanan menjadi bagian penting dalam pengembangan aplikasi yang menyimpan data pengguna. Fitur login yang tampak berjalan belum tentu aman jika token, password, atau endpoint tidak dikelola dengan benar.

Berikut beberapa prinsip yang perlu dipahami sejak awal.

Gunakan HTTPS

Komunikasi dengan backend produksi harus menggunakan HTTPS agar data terlindungi selama transmisi. Hindari mengirim password atau token melalui koneksi HTTP biasa.

Jangan menyimpan password dalam bentuk teks biasa

Jika membangun backend sendiri, password harus diproses menggunakan algoritma hashing password yang sesuai dan konfigurasi yang aman. Jangan menyimpan password mentah di database dan jangan mencoba membuat algoritma hashing sendiri.

Jika menggunakan layanan autentikasi terkelola, ikuti mekanisme dan panduan keamanan dari penyedia layanan.

Gunakan penyimpanan kredensial yang sesuai

Jangan menyimpan token sensitif secara sembarangan menggunakan penyimpanan preferensi biasa. Untuk kebutuhan tertentu pada aplikasi native, paket seperti flutter_secure_storage menyediakan akses ke mekanisme penyimpanan yang dirancang untuk data sensitif pada platform yang didukung. Periksa dokumentasi dan batasan platform sebelum menggunakannya.

Validasi semua permintaan di backend

Validasi pada Flutter berguna untuk memberikan umpan balik yang cepat. Namun, backend tetap perlu memvalidasi input, identitas pengguna, dan izin operasi sebelum memproses data.

Batasi informasi sensitif dalam log

Jangan mencatat password, access token, refresh token, atau data sensitif lainnya ke log aplikasi dan server tanpa kebutuhan yang sah serta perlindungan yang sesuai.

Baca juga:  Menguasai Widget Flutter: Jenis, Fungsi, dan Contohnya untuk Pemula

Tangani sesi dan kegagalan secara benar

Aplikasi perlu menangani jaringan terputus, token kedaluwarsa, respons tidak valid, dan kegagalan autentikasi tanpa membocorkan informasi internal.

Prinsip ini menjadi dasar awal. Untuk aplikasi produksi, Anda juga perlu mempelajari pembatasan percobaan login, verifikasi email, pemulihan akun, pengamanan endpoint, kebijakan privasi, serta pengujian keamanan.

Contoh Proyek Praktik: Aplikasi Manajemen Karyawan

Untuk menggabungkan materi Level 10 dan Level 11, Anda dapat membuat aplikasi manajemen karyawan dengan autentikasi dan backend.

Proyek ini relevan karena menggabungkan antarmuka, CRUD, REST API, database Flutter, identitas pengguna, dan hak akses.

Fitur tahap pertama

  • Halaman login.
  • Halaman registrasi jika memang diizinkan oleh desain aplikasi.
  • Logout.
  • Halaman profil pengguna.
  • Daftar karyawan dari backend.
  • Halaman detail karyawan.
  • Formulir tambah dan edit data bagi pengguna yang berwenang.
  • Loading state dan error handling.

Fitur tahap kedua

Setelah fungsi inti berjalan, tambahkan:

  • Peran admin dan karyawan.
  • Pembatasan akses endpoint berdasarkan peran.
  • Pengelolaan sesi.
  • Penanganan token kedaluwarsa.
  • Pencarian dan filter data.
  • Pengujian autentikasi dan hak akses.

Rancangan struktur project

Contoh berikut menunjukkan salah satu cara mengelompokkan kode:

lib/
├── main.dart
├── core/
│   ├── api_client.dart
│   └── app_router.dart
├── features/
│   ├── auth/
│   │   ├── login_screen.dart
│   │   ├── register_screen.dart
│   │   ├── auth_repository.dart
│   │   └── auth_view_model.dart
│   ├── profile/
│   │   ├── profile_screen.dart
│   │   └── profile_repository.dart
│   └── employees/
│       ├── employee_list_screen.dart
│       ├── employee_detail_screen.dart
│       ├── employee_repository.dart
│       └── employee_model.dart
└── shared/
    └── widgets/

Struktur ini bersifat ilustratif. Anda dapat menyederhanakannya pada tahap awal dan mengembangkannya seiring bertambahnya kebutuhan.

Tahapan pengerjaan

  1. Rancang alur login dan logout.
  2. Siapkan layanan autentikasi atau custom backend.
  3. Buat halaman autentikasi dan validasi input.
  4. Hubungkan aplikasi dengan endpoint backend.
  5. Implementasikan status autentikasi dan navigasi yang sesuai.
  6. Tampilkan data karyawan dari API.
  7. Terapkan otorisasi di backend.
  8. Uji skenario berhasil, gagal, dan akses yang tidak diizinkan.
  9. Dokumentasikan cara menjalankan aplikasi.

Target akhir proyek: aplikasi Flutter yang dapat melakukan autentikasi, mengambil data dari backend, dan menerapkan pembatasan akses sesuai kebijakan server.

Pengujian Authentication dan Backend

Pengujian perlu mencakup lebih dari sekadar memastikan login berhasil. Anda harus memeriksa bagaimana aplikasi bereaksi ketika terjadi kesalahan dan apakah backend benar-benar menolak permintaan yang tidak diizinkan.

Gunakan checklist berikut:

  • Registrasi dengan input yang valid.
  • Registrasi dengan email atau data yang tidak valid.
  • Login dengan kredensial yang benar.
  • Login dengan kredensial yang salah.
  • Logout dan pemeriksaan status setelah logout.
  • Pembukaan kembali aplikasi dan pemeriksaan sesi.
  • Penanganan jaringan yang terputus.
  • Penanganan token kedaluwarsa jika sistem menggunakannya.
  • Penolakan akses ke endpoint tanpa autentikasi.
  • Penolakan akses ke endpoint yang tidak sesuai dengan peran pengguna.
  • Pemeriksaan bahwa data pengguna tidak tertukar.
  • Pemeriksaan bahwa token atau password tidak muncul dalam log.

Untuk menguji otorisasi, jangan hanya memeriksa apakah tombol admin disembunyikan. Coba akses endpoint yang dilindungi dengan akun yang tidak memiliki izin, lalu pastikan backend menolak permintaan tersebut.

Pengujian juga dapat dilakukan pada service, repository, dan state autentikasi secara terpisah agar masalah lebih mudah ditemukan.

Kesalahan Umum saat Belajar Authentication dan Backend

1. Menganggap login sama dengan otorisasi. Pengguna yang sudah login belum tentu memiliki hak untuk mengakses semua fitur.

2. Mengandalkan validasi di sisi Flutter. Validasi UI tidak dapat menggantikan validasi dan kontrol akses di backend.

3. Menyimpan password atau token tanpa pertimbangan keamanan. Tentukan mekanisme penyimpanan sesuai jenis data, platform, dan arsitektur autentikasi.

4. Mengabaikan status sesi. Aplikasi harus mampu menghadapi kondisi logout, sesi kedaluwarsa, dan perubahan status autentikasi.

5. Menaruh seluruh kode autentikasi di halaman login. Pisahkan UI, state, repository, dan service sesuai kebutuhan supaya kode lebih mudah diuji.

6. Membuat backend terlalu kompleks sejak awal. Mulailah dengan alur login, profil, dan satu endpoint yang dilindungi sebelum menambahkan fitur lebih banyak.

7. Menganggap Firebase atau BaaS otomatis mengamankan semua data. Konfigurasi aturan akses dan validasi tetap harus dilakukan dengan benar.

Checklist Kelulusan Level 11

Sebelum melanjutkan ke Level 12, pastikan Anda telah memahami kompetensi berikut:

  • Memahami perbedaan authentication dan authorization.
  • Memahami fungsi backend dalam aplikasi Flutter.
  • Mampu menjelaskan alur registrasi dan login.
  • Mampu menangani loading, error, dan status autentikasi.
  • Memahami session management.
  • Memahami fungsi access token dan refresh token pada sistem yang menggunakannya.
  • Mampu menghubungkan Flutter dengan endpoint API yang dilindungi.
  • Memahami cara mengelola profil pengguna.
  • Memahami perbedaan kontrol akses di UI dan otorisasi di backend.
  • Memahami dasar pengamanan kredensial dan komunikasi jaringan.
  • Mampu menguji skenario login, logout, dan akses yang tidak diizinkan.
  • Memiliki proyek latihan yang terdokumentasi.

Anda tidak perlu langsung membangun sistem autentikasi produksi dari nol. Yang terpenting adalah memahami konsep dan mampu menerapkannya melalui SDK atau backend yang digunakan.

Setelah memahami autentikasi dan integrasi backend, tantangan berikutnya adalah menjaga struktur kode tetap teratur ketika fitur aplikasi bertambah.

Pada aplikasi yang lebih kompleks, halaman login, profil, data karyawan, transaksi, dan pengelolaan pengguna mungkin memiliki service serta repository masing-masing. Jika semuanya saling bergantung tanpa batas yang jelas, kode akan lebih sulit diuji dan dikembangkan.

Karena itu, tahap berikutnya adalah mempelajari cara menyusun struktur aplikasi, memisahkan UI dan data layer, mengelola tanggung jawab setiap komponen, serta menerapkan pola arsitektur yang sesuai dengan kebutuhan proyek.

Level 11 mengajarkan bagaimana aplikasi mengenali pengguna dan berkomunikasi dengan backend. Level 12 membantu Anda menyusun seluruh bagian tersebut menjadi sistem aplikasi yang lebih terstruktur dan mudah dipelihara.

Kesimpulan

Authentication dan backend merupakan fondasi penting bagi aplikasi Flutter yang membutuhkan akun pengguna, data terpusat, dan pembatasan akses.

Melalui Level 11, Anda mempelajari perbedaan autentikasi dan otorisasi, fungsi backend, proses registrasi dan login, session management, token, integrasi REST API, pengelolaan profil, serta keamanan dasar.

Untuk latihan, mulailah dari aplikasi dengan login dan halaman profil. Setelah itu, hubungkan aplikasi dengan endpoint yang dilindungi dan terapkan pemeriksaan hak akses di backend. Anda dapat menggunakan Firebase Authentication atau custom REST API sesuai tujuan belajar.

Jangan hanya mengejar fitur login yang berhasil. Pastikan Anda juga memahami apa yang terjadi ketika kredensial salah, sesi berakhir, jaringan terputus, atau pengguna mencoba mengakses data yang bukan haknya.

Dengan menguasai konsep-konsep tersebut, Anda akan memiliki bekal yang lebih kuat untuk melanjutkan ke Level 12 — Clean Code dan Arsitektur Flutter dan membangun aplikasi yang lebih terstruktur, aman, serta siap dikembangkan.

Bagikan

Tinggalkan komentar

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Artikel Terkait
testing performance flutter
CodingFlutter

Testing, Debugging, dan Performance Flutter untuk Pemula

Pelajari testing, debugging, dan optimasi performa Flutter melalui unit test, widget test,...

clean code flutter
CodingFlutter

Clean Code dan Arsitektur Flutter untuk Pemula

Pelajari Clean Code dan arsitektur Flutter, mulai dari SOLID, MVVM, repository pattern,...

membuat aplikasi flutter
CodingFlutter

Membuat Aplikasi Flutter: 7 Ide Project untuk Pemula

Pelajari cara membuat aplikasi Flutter nyata melalui 7 proyek, mulai dari To-Do...

database flutter
CodingFlutter

Database Flutter: SQLite, Local Storage, dan CRUD untuk Pemula

Pelajari database Flutter dan local storage dari nol, mulai dari SQLite, shared_preferences,...