Pengaturan Umum Supabase Google Login
Copy sebuah prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Pendahuluan
Bab yang berjudul “Pendahuluan”Panduan ini akan mengantumkan 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
Judul Bagian “Persyaratan”Sebelum memulai, pastikan Anda telah:
-
Read the Konfigurasi Google Login Umum Petunjuk untuk mengatur kredit OAuth Google
-
Ikuti panduan spesifik platform masing-masing untuk mengatur kredit OAuth Google untuk platform target Anda:
Mengaktifkan penyedia OAuth Google di Supabase
Bab yang berjudul “Mengaktifkan penyedia OAuth Google di Supabase”-
Pergi ke halaman Papan Pengaturan Supabase
-
Klik pada proyek Anda
-
Perlu Anda pergi ke menu
Authenticationmenu
-
Klik pada
Providerstab
-
Temukanlah
Googlepemasok
-
aktifkan pemasok
-
Tambahkan ID klien untuk platform yang Anda rencanakan untuk digunakan
-
Klik pada tombol
Savebutton
Sekarang Anda telah mengaktifkan Sign-In Google dengan Otentikasi Supabase 🎉
Bagaimana Cara Sign-In Google dengan Bantuan Autentikasi Supabase Berfungsi
Judul Bagian “Bagaimana Cara Sign-In Google dengan Bantuan Autentikasi Supabase Berfungsi”Bagian ini menjelaskan bagaimana integrasi Sign-In Google dengan Supabase bekerja di balik layar. Memahami alur ini akan membantu Anda mengimplementasikan dan mengatasi masalah autentikasi.
Judul Bagian “1. Penghasilan Nonce”
Bagian berjudul “1. Penghasilan Nonce”Implementasi menghasilkan pasangan nonce yang aman berdasarkan Syarat 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: SHA-256 hash darirawNonce(dihex-encoding)nonceDigestdiarahkan ke Google Sign-In → Google menyertakan nonce digest dalam token IDrawNoncediarahkan ke Supabase → Supabase menghash nonce mentah dan membandingkannya dengan nonce token
2. Sign-In Google
Bab 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
Judul Bagian: “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?
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 dapat 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 akan 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): On iOS, validation ensures the token was issued for your specific Google Client IDs, preventing potential security issues from using tokens intended for other applications.
-
Pengelolaan Kesalahan yang Lebih Baik: Mengidentifikasi masalah sebelum Supabase memungkinkan logika ulang coba otomatis, yang sangat penting untuk mengatasi masalah caching iOS secara transparan.
Jika validasi gagal, fungsi otomatis:
- Keluar dari Google (membersihkan token yang dicadangkan - sangat kritis pada iOS)
- Ulangi autentikasi sekali (memaksa generasi token yang baru dengan nonce yang benar)
- Jika ulang coba juga gagal, kembalikan kesalahan
4. Sign-In Supabase
Judul bagian “4. Sign-In Supabase”Terakhir, token yang telah diverifikasi dikirimkan 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 Aplikasi contoh’s supabaseAuthUtils.ts File, yang termasuk:
getUrlSafeNonce()- Membuat URL-aman acak noncesha256Hash()- Menghash string dengan SHA-256getNonce()- Membuat pasangan noncedecodeJWT()- Mengurai token JWTvalidateJWTToken()- Mengvalidasi audiens JWT dan nonceauthenticateWithGoogleSupabase()- Fungsi autentikasi utama dengan retry otomatis
Contoh File Tambahan
Bab berjudul “Contoh File Tambahan”- SupabasePage.tsx - Komponen contoh dengan pengaturan redirect (Web)
- SupabaseCreateAccountPage.tsx - Contoh halaman buat akun
Next Steps
Langkah SelanjutnyaSilakan lanjutkan ke panduan pengaturan platform khusus untuk platform target Anda.
Teruskan dari Pengaturan Umum Supabase Google Login
Teruskan dari Pengaturan Login Google Supabase - UmumJika Anda menggunakan Pengaturan Login Google Supabase - Umum untuk merencanakan autentikasi dan alur akun, hubungkannya dengan Menggunakan @capgo/capacitor-login-social untuk kemampuan asli di Menggunakan @capgo/capacitor-login-social, @capgo/capacitor-login-social untuk detail implementasi di @capgo/capacitor-login-social, @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.