Profile Rows
Memisahkan identity Supabase Auth dari profile aplikasi yang dapat dibaca dan diperbarui sesuai RLS policy.
Tujuan belajar
- Membedakan auth.users dari public.profiles
- Merancang profile row yang memakai auth user id sebagai primary key
- Menentukan data mana yang pantas berada di profile aplikasi
- Membaca policy select/update sederhana untuk profile user sendiri
Isi lesson
6 blok- 1.Auth user dan profile aplikasi bukan object yang samaBelum selesaiWajib
- 2.Profile row satu banding satu dengan auth userBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.Profile editable bukan tempat menyimpan hak istimewaBelum selesaiWajib
- 6.RingkasanBelum selesaiWajib
Auth user dan profile aplikasi bukan object yang sama
WajibSupabase menyimpan identity auth di schema auth. Schema tersebut tidak diekspos melalui auto-generated API untuk penggunaan aplikasi biasa. Jika app perlu display name, bio, avatar URL, atau preference learner, buat tabel public.profiles yang merujuk ke auth.users. Dengan cara ini, aplikasi memiliki data yang memang dibutuhkan UI tanpa menjadikan auth metadata sebagai database aplikasi serbaguna.
Untuk profile satu banding satu, id profile biasanya sama dengan auth user id dan menjadi primary key. Policy RLS kemudian membatasi user agar hanya dapat membaca atau mengubah profile miliknya. Jangan menaruh password, raw token, service role key, atau authorization flag yang sensitif pada profile yang dapat diubah user sendiri.
Bagian ini memengaruhi progres lesson.
Profile row satu banding satu dengan auth user
Wajibcreate table public.profiles (
id uuid primary key references auth.users(id) on delete cascade,
display_name text not null,
bio text,
updated_at timestamptz not null default now()
);
alter table public.profiles enable row level security;
create policy "Users can read their own profile"
on public.profiles
for select
to authenticated
using ((select auth.uid()) = id);
create policy "Users can update their own profile"
on public.profiles
for update
to authenticated
using ((select auth.uid()) = id)
with check ((select auth.uid()) = id);references auth.users(id) menjaga profile tetap terkait dengan identity yang valid, sedangkan on delete cascade membersihkan profile bila auth user dihapus. Policy contoh membatasi profile menjadi private. Bila product membutuhkan profile public, definisikan kebutuhan baca tersebut secara eksplisit di policy lain; jangan membuka semua operasi hanya karena satu field perlu terlihat publik.
Bagian ini memengaruhi progres lesson.
Coding practice
WajibDibuka di workspace khususModel user profile row
Modelkan data profile aplikasi yang memakai auth user id sebagai identity tetap dan update input yang tidak mengizinkan id diubah dari browser.
Tujuan awal: Fokus di tab TSX.
Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.
Tombol selesai aktif setelah semua validasi wajib lolos.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Mengapa app membuat public.profiles alih-alih mencoba memakai auth.users langsung dari browser?
Progres lesson naik setelah jawaban benar.
Kesalahan umum
WajibProfile editable bukan tempat menyimpan hak istimewa
Field seperti display_name dan bio mungkin boleh diubah pemilik profile. Field seperti is_admin, subscription status, atau authorization role membutuhkan desain dan kontrol lebih ketat daripada update profile biasa. Pada tahap ini, fokus pada satu profile private milik user sendiri; admin dashboard, role matrix, dan trigger kompleks dibahas di tahap lain.
Bagian ini memengaruhi progres lesson.
Ringkasan
Wajib- auth.users menyimpan identity, sedangkan public.profiles menyimpan data aplikasi yang diperlukan UI.
- Profile satu banding satu dapat memakai auth user id sebagai primary key dan foreign key.
- RLS select/update menjaga profile private tetap hanya dapat diakses pemiliknya.
- Jangan menyimpan secret atau hak istimewa editable pada profile biasa.
- Berikutnya, kamu akan menguji seluruh keputusan integration sebelum berpindah ke production operations.
Bagian ini memengaruhi progres lesson.
Langkah berikutnya
Selesaikan bagian penting lesson ini
Lanjutkan blok wajib berikutnya: Auth user dan profile aplikasi bukan object yang sama.