Supabase Google Login - Pengaturan Umum
Copy sebuah prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Intro
Bab berjudul “Intro”Panduan ini akan membantu Anda mengintegrasikan Google Sign-In dengan Supabase Authentication menggunakan plugin Login Sosial Capacitor . Konfigurasi ini memungkinkan Anda menggunakan Google Sign-In native di platform mobile sambil menggunakan Supabase Auth untuk autentikasi backend.
Prasyarat
Bab berjudul “Prasyarat”Sebelum memulai, pastikan Anda telah:
-
Membaca Panduan Pengaturan Login Google Umum mengatur kredential OAuth Google
-
Melakukan langkah-langkah yang relevan di panduan platform spesifik untuk mengatur kredential OAuth Google untuk platform target Anda:
Mengaktifkan penyedia Oauth Google di Supabase
Bagian berjudul “Mengaktifkan penyedia Oauth Google di Supabase”-
Pergi ke halaman Dashboard Supabase
-
Klik pada proyek Anda
-
Perlukah ke menu
Authenticationmenu
-
Klik pada
Providerstab
-
Cari
Googleprovider
-
Aktifkan pengguna
-
Tambahkan ID klien untuk platform yang Anda rencanakan untuk digunakan
-
Klik pada tombol
SaveSupabase Google Provider Simpan
Voilà, Anda telah mengaktifkan Google Sign-In dengan Supabase Authentication 🎉
Bagaimana Google Sign-In dengan Supabase Authentication Helper Bekerja
Bagian berjudul “Bagaimana Google Sign-In dengan Supabase Authentication Helper Bekerja”Bagian ini menjelaskan bagaimana integrasi Google Sign-In dengan Supabase bekerja di balik layar. Memahami alur ini akan membantu Anda mengimplementasikan dan menyelesaikan masalah autentikasi.
1. Penghasilan Nonce
Section berjudul “1. Penghasilan Nonce”Implementasi menghasilkan pasangan nonce yang aman berdasarkan persyaratan nonce Supabase Nonce Supabase:
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Generate nonce pairasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}Alur:
rawNonce: String acak URL-aman (64 karakter hex)nonceDigest(dihex-encoding)rawNoncedisampaikan ke Google Sign-In → Google menyertakan nonce digest dalam token IDnonceDigestdisampaikan ke Supabase → Supabase menghash nonce mentah dan membandingkannya dengan nonce tokenrawNonce2. Google Sign-In
__CAPGO_KEEP_0__
Bagian berjudul “2. Sign-In Google”Fungsi ini menginisialisasi plugin dan melakukan sign-in dengan Google:
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. Validasi JWT
Bagian berjudul “3. Validasi JWT”Sebelum mengirimkan token ke Supabase, implementasi melakukan validasi token JWT:
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}Mengapa harus validasi sebelum Supabase?
Mengvalidasi token JWT sebelum mengirimkan token ke Supabase memiliki beberapa tujuan penting:
-
Mencegah Permintaan Tidak Sah: Jika token memiliki audiens atau nonce yang salah, Supabase akan menolak token tersebut. Mengvalidasi terlebih dahulu menghindari panggilan API yang tidak perlu dan memberikan pesan kesalahan yang lebih jelas.
-
Masalah Cache Token: Pada beberapa platform (terutama iOS), Google Sign-In SDK dapat menyimpan token untuk meningkatkan kinerja. Ketika token yang disimpan dikembalikan, token yang disimpan mungkin telah dibuat dengan nonce yang berbeda (atau tidak ada nonce sama sekali), sehingga Supabase menolak token dengan pesan kesalahan “nonce mismatch”. Dengan melakukan validasi sebelum mengirim ke Supabase, kita dapat mendeteksi masalah ini sebelumnya dan secara otomatis mencoba lagi dengan token yang segar.
-
Keamanan (iOS): Pada iOS, validasi memastikan token dikeluarkan untuk ID Klien Google yang spesifik, mencegah potensi masalah keamanan dari menggunakan token yang dimaksudkan untuk aplikasi lain.
-
Penanganan Kesalahan yang Lebih Baik: Mendeteksi masalah sebelum Supabase memungkinkan logika ulang coba otomatis, yang sangat penting untuk menangani masalah caching iOS secara transparan.
Jika validasi gagal, fungsi ini secara otomatis:
- Keluar dari Google (membersihkan token yang disimpan - sangat kritis pada iOS)
- Ulangi autentikasi sekali (memaksa pembuatan token segar dengan nonce yang benar)
- Jika ulang coba juga gagal, kembalikan pesan kesalahan
4. Sign-In Supabase
Judul bagian “4. Sign-In Supabase”Terakhir, token yang telah diverifikasi dikirim ke Supabase:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Referensi Code yang lengkap
Judul bagian “Referensi Code yang lengkap”Implementasi lengkap tersedia di contoh aplikasi’s supabaseAuthUtils.ts file, yang mencakup:
getUrlSafeNonce()- Membuat nonce acak yang aman untuk URLsha256Hash()- Menghash string dengan SHA-256getNonce()- Membuat pasangan noncedecodeJWT()- Membuka token JWTvalidateJWTToken()- Mengvalidasi audiens dan nonce JWTauthenticateWithGoogleSupabase()- Fungsi autentikasi utama dengan retry otomatis
Contoh File Tambahan
Judul Bagian “Contoh File Tambahan”- SupabasePage.tsx - Komponen contoh dengan penanganan redirect (Web)
- SupabaseCreateAccountPage.tsx - Halaman contoh pembuatan akun
Langkah Selanjutnya
Judul Bagian “Langkah Selanjutnya”Silakan melanjutkan ke panduan pengaturan platform spesifik untuk platform target Anda:
Teruskan dari Supabase Google Login - Pengaturan Umum
Judul Bagian “Teruskan dari Supabase Google Login - Pengaturan Umum”Jika Anda menggunakan Pengaturan Umum Supabase Google Login untuk merencanakan autentikasi dan alur akun, hubungkannya dengan Menggunakan @capgo/capacitor-login-social untuk kemampuan asli dalam Menggunakan @capgo/capacitor-login-social, Menggunakan @capgo/capacitor-login-social untuk detail implementasi dalam @capgo/capacitor-login-social, Menggunakan @capgo/capacitor-passkey untuk detail implementasi dalam @capgo/capacitor-passkey, Menggunakan @capgo/capacitor-biometrik-asli untuk detail implementasi di @capgo/capacitor-native-biometric, dan Autentikasi Dua Faktor untuk detail implementasi di Autentikasi Dua Faktor.