Authentication Flow dengan Navigasi
Conditional navigator — user belum login vs sudah login
Tujuan Pembelajaran
- Memahami pola conditional navigation untuk auth flow
- Mampu mengimplementasikan AuthStack dan AppStack
- Mengerti cara handle loading state saat cek session
Analogi
Auth Flow = Pintu Gedung:
- Belum login → Lobby (LoginScreen, RegisterScreen)
- Sudah login → Ruang dalam (MainTabs, semua screen)
- Loading (cek session) → Loading screen (jangan flash wrong screen)
Conditional navigator = satpam yang tentuin user masuk lobby atau ruang dalam.
Auth flow seperti pintu gedung — satpam (conditional navigator) ngecek: user punya akses? Kalau belum, arahkan ke lobby (login). Kalau sudah, masuk ruang dalam (main app).
Penjelasan Konsep
Aplikasi hampir selalu punya dua states: logged in dan logged out. Pattern untuk ini: conditional rendering di root NavigationContainer.
Struktur: (1) Root navigator (biasanya Stack) dengan dua screens: SplashScreen (loading) dan MainNavigator. (2) MainNavigator: conditional — kalau user null (belum cek), render SplashScreen. Kalau user tidak ada (not logged in), render AuthStack. Kalau user ada (logged in), render AppStack.
AuthStack: Stack Navigator berisi LoginScreen, RegisterScreen, ForgotPasswordScreen. Hanya screen-screen sebelum login. AppStack: Tab Navigator atau Stack berisi semua screen aplikasi utama (Home, Profile, etc).
Session check: saat app start, cek AsyncStorage untuk token. Kalau ada, validasi ke backend (GET /me). Kalau valid, set user state. Kalau tidak, hapus token, arahkan ke login. SELAMA cek, tampilkan loading — jangan tampilkan login screen lalu switch ke app (flicker jelek).
Logout: hapus token dari storage → reset navigation state ke AuthStack → user kembali ke login screen. Gunakan navigation.reset() untuk clear seluruh history.
Deep linking + auth: kalau user belum login tapi buka deep link (misal: notifikasi), simpan URL yang dituju → setelah login, redirect ke URL tersebut.
Inti yang Perlu Dipahami
Bagian ini berfokus pada memahami pola conditional navigation untuk auth flow., mampu mengimplementasikan AuthStack dan AppStack., dan mengerti cara handle loading state saat cek session. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.
Saat membaca Authentication Flow dengan Navigasi, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.
Cara Membayangkannya
Auth flow seperti pintu gedung — satpam (conditional navigator) ngecek: user punya akses? Kalau belum, arahkan ke lobby (login). Kalau sudah, masuk ruang dalam (main app). Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.
Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.
Saat Melihat Contoh Kode
Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. user state: undefined = loading, null = not logged in, object = logged in. Conditional render berdasarkan nilai user. Jangan lupa SplashScreen untuk loading state.
Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.
Konteks dalam Perjalanan Belajar
Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.
Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.
Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.
Contoh Kode
function RootNavigator() {
const [user, setUser] = useState<User | null | undefined>(undefined);
useEffect(() => { checkAuth().then(setUser); }, []);
if (user === undefined) return <SplashScreen />;
return (
<Stack.Navigator screenOptions={{ headerShown: false }}>
{user ? (
<Stack.Screen name="App" component={AppTabs} />
) : (
<Stack.Screen name="Auth" component={AuthStack} />
)}
</Stack.Navigator>
);
}Penjelasan Kode
Prompt AI
Desain auth flow lengkap: email login, social login (Google, Apple), biometric unlock, dan deep link redirect setelah login. Berikan struktur navigator dan flow diagram.
Pertanyaan Reflektif
Apakah aplikasi-aplikasi yang kamu pakai punya auth flow yang smooth? Bagaimana mereka meng-handle loading state saat cek session?