Pengaturan Umum Login Google Supabase
Copas prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Pendahuluan
Bagian berjudul “Pendahuluan”Panduan ini akan memandu Anda melalui integrasi Sign-In Google dengan Supabase Authentication menggunakan plugin Capacitor Social Login. Konfigurasi ini memungkinkan Anda menggunakan Sign-In Google asli pada platform mobile sambil memanfaatkan Supabase Auth untuk autentikasi backend.
Persyaratan Sebelumnya
Bagian berjudul “Persyaratan Sebelumnya”Sebelum memulai, pastikan Anda telah:
-
Baca panduan Pengaturan Google Login Umum panduan untuk mengatur kredit OAuth Google
-
Ikuti panduan platform khusus yang relevan untuk mengatur kredit OAuth Google untuk platform target Anda:
Mengaktifkan penyedia OAuth Google di Supabase
Bagian berjudul “Mengaktifkan penyedia OAuth Google di Supabase”-
Pergi ke akun Dashboard Supabase
-
Klik pada proyek Anda
-
Pergi ke menu
AuthenticationMenu
-
Klik pada
ProvidersTab
-
Temukan
GooglePengembang
-
Aktifkan penyedia
-
Tambahkan ID klien untuk platform yang Anda rencanakan untuk digunakan
-
Klik pada tombol
Savetombol
Voilà, Anda telah mengaktifkan Sign-In Google 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 Sign-In Google dengan Supabase bekerja di balik layar. Memahami alur ini akan membantu Anda mengimplementasikan dan menyelesaikan masalah autentikasi.
Bagian berjudul “1. Penghasilan Nonce”
Implementasi menghasilkan pasangan nonce yang aman sesuai dengankebutuhan nonce Supabase Salin ke clipboard:
// 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 };}: String acak yang aman untuk URL (64 karakter hex)
rawNonce: Hash SHA-256 darinonceDigestFlow:rawNonce(kode hex)nonceDigestdiarahkan ke Google Sign-In → Google mencantumkan digest nonce dalam token IDrawNoncediarahkan ke Supabase → Supabase menghash nonce mentah dan membandingkannya dengan nonce token
2. Google Sign-In
Bagian berjudul “2. Google Sign-In”Fungsi ini menginisialisasi plugin dan masuk 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 melakukan validasi sebelum Supabase?
Validasi 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. Validasi terlebih dahulu menghindari panggilan API yang tidak perlu dan memberikan pesan kesalahan yang lebih jelas.
-
Issue 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 tersebut dengan pesan kesalahan “nonce mismatch”. Dengan melakukan validasi sebelum mengirimkan ke Supabase, kita dapat mendeteksi masalah ini lebih awal dan secara otomatis mengulangi dengan token yang segar.
-
Keamanan (iOS): Validasi memastikan token tersebut diterbitkan untuk ID Klien Google yang spesifik, sehingga mencegah potensi masalah keamanan dari menggunakan token yang dimaksudkan untuk aplikasi lain.
-
Pengelolaan Kesalahan yang Lebih Baik: Mendeteksi masalah sebelum Supabase memungkinkan logika ulang otomatis, yang sangat penting untuk mengelola masalah cache iOS secara transparan.
Jika validasi gagal, fungsi tersebut 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 juga gagal, kembali error
4. Supabase Sign-In
Bagian berjudul “4. Supabase Sign-In”Akhirnya, 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});Complete Code Reference
Bagian berjudul “Complete Code Reference”Implementasi lengkap tersedia di contoh aplikasi’s supabaseAuthUtils.ts file, yang mencakup:
getUrlSafeNonce()- Membuat URL-aman acak noncesha256Hash()- 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-Langkah Selanjutnya
Judul Bagian “Langkah-Langkah Selanjutnya”Silakan lanjutkan ke panduan pengaturan platform khusus untuk platform target Anda: