Pengaturan Umum Supabase Google Login
Salin prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Pendahuluan
Judul bagian “Pendahuluan”Panduan ini akan memandu Anda untuk mengintegrasikan Sign-In Google dengan Supabase Authentication menggunakan plugin Login Sosial Capacitor.
Persyaratan
Judul bagian “Persyaratan”Pastikan Anda telah memiliki:
-
Baca panduan Pengaturan Login Google Umum panduan untuk mengatur kredensial OAuth Google
-
Ikuti panduan spesifik platform untuk mengatur kredensial OAuth Google untuk platform target Anda:
Mengaktifkan penyedia Oauth Google di Supabase
Judul bagian “Mengaktifkan penyedia Oauth Google di Supabase”-
Pergi ke halaman Dashboard Supabase
-
Klik pada proyek Anda
-
Pergi ke menu
AuthenticationMenu Autentikasi Supabase
-
Tab Penyedia Supabase
ProvidersPergi ke menu
-
Temukan
Googlepenyedia
-
Aktifkan penyedia
-
Tambahkan ID klien untuk platform yang Anda rencanakan untuk digunakan
-
Klik pada
Savetombol
Voilà, Anda telah mengaktifkan Sign-In Google dengan Supabase Authentication 🎉
Bagaimana Helper Sign-In Google dengan Supabase Authentication Bekerja
Bagaimana Helper Sign-In Google dengan Supabase Authentication BekerjaBagian ini menjelaskan bagaimana integrasi Google Sign-In dengan Supabase bekerja di balik layar. Memahami aliran ini akan membantu Anda mengimplementasikan dan menyelesaikan masalah autentikasi.
Judul bagian “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 };}Implementasi Lengkap
rawNonce: String acak aman URL (64 karakter hex)nonceDigest: Hash SHA-256 darirawNonce(dienkripsi hex)nonceDigestdiarahkan ke Google Sign-In → Google termasuk 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 inisialisasi 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 memvalidasi 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 memvalidasi sebelum Supabase?
Memvalidasi token JWT sebelum mengirimkan token ke Supabase memiliki beberapa tujuan penting:
-
Mencegah Permintaan Tidak Sah: Jika token memiliki audiens yang salah atau nonce tidak sesuai, Supabase akan menolak token tersebut. Memvalidasi 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 tersebut dengan pesan kesalahan “nonce tidak sesuai”. Dengan memvalidasi sebelum mengirimkan ke Supabase, kita dapat mendeteksi masalah ini lebih awal dan secara otomatis mengulangi dengan token yang segar.
-
Keamanan (iOS): Pada 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 caching iOS secara transparan.
Jika validasi gagal, fungsi secara otomatis:
- Keluar dari Google (menghapus token yang disimpan - sangat penting pada iOS)
- Mengulang autentikasi sekali (memaksa generasi token yang baru dengan nonce yang benar)
- Jika ulangan juga gagal, kembali dengan pesan kesalahan
4. Sign-In Supabase
Judul bagian “4. Sign-In Supabase”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});Referensi Code yang lengkap
Judul bagian “Referensi Code yang lengkap”Implementasi yang 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()- Membaca Token JWTvalidateJWTToken()- Mengvalidasi Audience dan Nonce JWTauthenticateWithGoogleSupabase()- Fungsi Autentikasi Utama dengan Ulangan Otomatis
Contoh File Tambahan
Judul Bagian “Contoh File Tambahan”- SupabasePage.tsx - Komponen Contoh dengan Pengaturan Redirect (Web)
- SupabaseCreateAccountPage.tsx - Halaman Pendaftaran Contoh
Langkah-Langkah Selanjutnya
Judul Bagian “Langkah-Langkah Selanjutnya”Silakan melanjutkan ke panduan pengaturan platform yang spesifik untuk platform target Anda:
Lanjutkan dari Pengaturan Supabase Google Login - Umum
Judul Bagian “Lanjutkan dari Pengaturan Supabase Google Login - Umum”Jika Anda menggunakan Pengaturan Supabase Google Login - Umum untuk merencanakan autentikasi dan alur akun, hubungkannya dengan Menggunakan @capgo/capacitor-social-login untuk kemampuan asli di Menggunakan @capgo/capacitor-login-sosial, @capgo/capacitor-login-sosial untuk detail implementasi di @capgo/capacitor-login-sosial, @capgo/capacitor-passkey untuk detail implementasi di @capgo/capacitor-passkey, @capgo/capacitor-biometrik-asli untuk detail implementasi di @capgo/capacitor-biometrik-asli, dan Autentikasi dua faktor untuk detail implementasi di Autentikasi dua faktor.