FluentStack

Profile Rows

Mode tersedia: dark, light, paper
MasukDaftar
Advanced · Level 11: Production Next.jsAdvanced65 menitBahasa Indonesia

Profile Rows

Memisahkan identity Supabase Auth dari profile aplikasi yang dapat dibaca dan diperbarui sesuai RLS policy.

StatusMemuat progres
ProgresMemuat...

...

Memuat progres

Menyiapkan langkah berikutnya

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
SupabaseProfilesRLSData ModelingNext.js

Isi lesson

6 blok
  1. 1.
    Auth user dan profile aplikasi bukan object yang samaBelum selesaiWajib
  2. 2.
    Profile row satu banding satu dengan auth userBelum selesaiWajib
  3. 3.
    Coding practiceBelum selesaiWajib
  4. 4.
    Cek pemahamanBelum selesaiWajib
  5. 5.
    Profile editable bukan tempat menyimpan hak istimewaBelum selesaiWajib
  6. 6.
    RingkasanBelum selesaiWajib

Auth user dan profile aplikasi bukan object yang sama

Wajib

Supabase 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

Wajib
sql
create 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 khusus

Model 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.

5 cek otomatis5 checklist
Belum selesaiBuka practice

Cek pemahaman

WajibJawab dulu

Cek pemahaman singkat

Mengapa app membuat public.profiles alih-alih mencoba memakai auth.users langsung dari browser?

Progres lesson naik setelah jawaban benar.

Kesalahan umum

Wajib

Profile 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.