Lovable ve Supabase kombinasyonu, kod yazmadan gerçek bir web uygulaması geliştirmenin en hızlı yollarından biridir. Lovable frontend bileşenlerini ve uygulama mantığını oluştururken, Supabase kullanıcı kimlik doğrulamasını, veritabanını ve API katmanını yönetir. Ancak bu iki aracın birlikte güvenli çalışması için birkaç kritik yapılandırma adımı gereklidir. Bu rehberde özellikle Row Level Security ve Auth entegrasyonunu ele alıyoruz.

Lovable ile Supabase neden birlikte kullanılır

Lovable, React tabanlı frontend uygulamaları oluşturur. Kendi başına bir backend sunmaz: veri depolama, kullanıcı yönetimi veya API güvenliği için dış bir servise bağlanmanız gerekir. Supabase bu boşluğu PostgreSQL üzerine kurulu açık kaynak bir backend-as-a-service olarak doldurur.

Bu kombinasyon şu nedenlerle tercih edilir: Supabase’in ücretsiz katmanı ciddi bir uygulama için yeterlidir; Lovable, Supabase bağlantısını yerleşik bir entegrasyon olarak sunar; ikisi birlikte aylarca sürebilecek backend geliştirme ihtiyacını birkaç saate indirir.

Supabase projesini oluşturmak ve Lovable’a bağlamak

İlk adım Supabase üzerinde yeni bir proje oluşturmaktır. supabase.com adresinden oturum açtıktan sonra “New Project” seçeneğiyle proje adı, şifre ve bölge seçilir. Proje oluşturulduktan sonra Supabase dashboard’unun sol menüsünden “Project Settings > API” bölümüne gidin. Burada iki değer bulunur: Project URL ve anon key.

Lovable tarafında editörü açın, sol menüden “Supabase” entegrasyonunu seçin ve bu iki değeri girin. Bağlantı tamamlandıktan sonra Lovable, Supabase tablolarınıza ve Auth sistemine otomatik olarak erişebilir.

Bu noktada önemli bir uyarı: anon key, tarayıcıda görünen ve herkese açık bir anahtardır. Bu anahtarla yapılan tüm işlemlerin güvenliği Row Level Security politikalarına dayanır. Anon key’i gizlemek mümkün değildir ve gizlemenize gerek yoktur; doğru RLS yapılandırması yeterlidir.

Row Level Security nedir ve neden kritiktir

Row Level Security (RLS), Supabase’in en önemli güvenlik mekanizmasıdır. RLS, veritabanı sorgularını tablo satırı düzeyinde filtreler. “Bu kullanıcı yalnızca kendi kayıtlarını görebilir” kuralı RLS ile uygulanır.

RLS olmadan şu senaryo gerçekleşir: anon key ile yapılan bir SELECT sorgusu tablodaki tüm satırları döndürür. Bu, bir kullanıcının başka kullanıcıların verilerini görebileceği anlamına gelir. Lovable ile yapılan her sorgu bu açıktan etkilenir.

RLS etkinleştirmek için Supabase dashboard’undan “Table Editor” bölümüne gidin, ilgili tabloyu seçin ve “RLS Enabled” seçeneğini açın. Ardından politika tanımlanması gerekir, aksi takdirde tabloya hiçbir erişim mümkün olmaz.

En yaygın RLS politikası şu şekilde tanımlanır:


CREATE POLICY "Kullanicinin kendi siparisleri"

ON siparisler

FOR SELECT

USING (auth.uid() = kullanici_id);

-- Kullanıcılar yalnızca kendi satırlarını güncelleyebilir

CREATE POLICY "Kullanici kendi siparisini guncelleyebilir"

ON siparisler

FOR UPDATE

USING (auth.uid() = kullanici_id);

auth.uid() fonksiyonu, o anki oturumda kim giriş yapmışsa o kullanıcının UUID’sini döndürür. Giriş yapmamış kullanıcılar için NULL döner ve politika koşulu sağlanmaz.

Kimlik doğrulama (Auth) yapılandırması

Supabase Authentication, e-posta/şifre, Google, GitHub ve benzeri sağlayıcılarla kayıt ve giriş akışlarını yönetir. Lovable, bu akışları birkaç adımda entegre edebilir.

Supabase dashboard’undan “Authentication > Providers” bölümünde hangi giriş yöntemlerinin aktif olacağı seçilir. E-posta/şifre varsayılan olarak etkindir.

Lovable’da kullanıcı kaydı için tipik bir akış şu bileşenleri içerir: e-posta ve şifre alanları, kayıt butonuna tıklandığında Supabase auth.signUp() çağrısı, başarılı kayıtta onay e-postası gönderme (isteğe bağlı) ve giriş yapan kullanıcıyı ilgili sayfaya yönlendirme.

Supabase otomatik olarak auth.users tablosunu yönetir. Ancak çoğunlukla kullanıcının adı, profil fotoğrafı veya rol bilgisi gibi ek verileri saklamak istenir. Bunun için profiles tablosu oluşturmak ve bir trigger ile auth.users’dan beslemek yaygın bir yaklaşımdır:

-- Profil tablosu

CREATE TABLE profiles (

  id UUID PRIMARY KEY REFERENCES auth.users(id),

  tam_ad TEXT,

  avatar_url TEXT,

  rol TEXT DEFAULT 'kullanici'

);

-- Yeni kullanıcı oluşturulduğunda otomatik profil ekle

CREATE FUNCTION handle_new_user()

RETURNS TRIGGER AS $$

BEGIN

  INSERT INTO profiles (id)

  VALUES (new.id);

  RETURN new;

END;

$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER on_auth_user_created

AFTER INSERT ON auth.users

FOR EACH ROW EXECUTE FUNCTION handle_new_user();

API anahtarlarını güvenli tutmak

Lovable uygulamasının üçüncü taraf bir API (örneğin OpenAI, Stripe veya başka bir servis) çağırması gerekiyorsa, bu API anahtarlarını asla frontend koduna yazmayın.

Doğru yöntem Supabase Edge Functions kullanmaktır. Edge Function, sunucu tarafında çalışan bir JavaScript fonksiyonudur ve Supabase ortam değişkenlerine güvenle erişebilir. Lovable, bu edge function’ı çağırır; edge function ise gerçek API anahtarını kullanarak üçüncü taraf servisi arar ve sonucu Lovable’a döndürür.

Bu katmanı kurarak API anahtarınız hiçbir zaman tarayıcıda görünmez.

Üretim öncesi güvenlik kontrol listesi

Uygulamanızı yayına almadan önce şu maddeleri kontrol edin: Tüm tablolarda RLS etkin mi? Her tablo için SELECT, INSERT, UPDATE ve DELETE operasyonlarını kapsayan politikalar yazılmış mı? Auth akışı test edildi mi: kayıt, giriş, şifre sıfırlama çalışıyor mu? Üçüncü taraf API anahtarları edge function üzerinden mi yönetiliyor, yoksa frontend’de mi saklı? Hata mesajları kullanıcıya kişisel veri sızdırıyor mu?

RLS politikalarını test etmek için Supabase’in yerleşik SQL editöründe şu sorguyu çalıştırabilirsiniz:

-- Belirli bir kullanıcı olarak sorgu simülasyonu

SET LOCAL role = authenticated;

SET LOCAL "request.jwt.claims" = '{"sub": "kullanici-uuid-buraya"}';

SELECT * FROM siparisler;

Eğer bu sorgu başka kullanıcıların kayıtlarını döndürüyorsa RLS politikanızı gözden geçirin.

BlueMark Academy ile Lovable’da daha ileri gitmek

Lovable + Supabase kombinasyonu, basit CRUD uygulamalarının ötesine geçen projeler için de yeterlidir. Gerçek zamanlı güncellemeler (Supabase Realtime), dosya depolama (Supabase Storage) ve karmaşık veritabanı ilişkileri bu kombinasyonla desteklenir.

Lovable’ın sadece teknik özelliklerini değil, uygulamanızı gerçek bir üretim ortamı için nasıl tasarlayacağınızı öğrenmek istiyorsanız Lovable AI Eğitimi programı bu konuları adım adım ele alıyor.