38980-vm/app-9w9pd00g5j41/CLERK_TROUBLESHOOTING.md
2026-03-04 18:25:09 +00:00

7.9 KiB
Raw Permalink Blame History

Clerk Üyelikleri Database'de Görünmüyor - Kesin Çözüm

Durum Tespiti

Clerk Yapılandırması: AKTIF

  • clerk_publishable_key database'de mevcut
  • Değer: pk_test_Z2FtZS1haXJlZGFsZS05Ni5jbGVyay5hY2NvdW50cy5kZXYk

Mevcut Profiller: 2 adet

  • 1 admin (Clerk ID var)
  • 1 admin (Clerk ID yok)

🔍 Sorunun Gerçek Nedeni

Clerk yapılandırması aktif ANCAK kullanıcılar database'de görünmüyor çünkü:

Neden 1: Kullanıcılar Kayıt Olduktan Sonra Giriş Yapmıyor

  • Clerk'te kayıt olan kullanıcılar mutlaka giriş yapmalı
  • Profile oluşturma işlemi ilk giriş sırasında gerçekleşir
  • Webhook yapılandırılmamışsa, kayıt anında profile oluşmaz

Neden 2: Email Doğrulama Tamamlanmıyor

  • Clerk email doğrulama gerektiriyorsa, kullanıcılar doğrulama yapmadan giriş yapamaz
  • Doğrulama yapılmadan profile oluşmaz

Neden 3: Hata Oluşuyor Ama Görünmüyor

  • Profile oluşturma sırasında hata olabilir
  • Kullanıcı giriş yapmış gibi görünür ama profile oluşmamıştır

🛠️ Kesin Çözüm

Çözüm 1: Webhook Yapılandırması (ÖNERİLEN)

Webhook yapılandırıldığında, kullanıcılar kayıt anında database'e eklenir.

Adım 1: Clerk Webhook Oluşturun

  1. Clerk Dashboard → Webhooks
  2. "Add Endpoint" butonuna tıklayın
  3. Endpoint URL:
https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook
  1. Events seçin:
    • user.created
    • user.updated
    • user.deleted
  2. "Create" butonuna tıklayın
  3. Signing Secret'i kopyalayın (örn: whsec_xxxxx)

Adım 2: Webhook Secret'i Supabase'e Ekleyin

  1. Supabase Dashboard
  2. Settings → Edge Functions → Secrets
  3. "Add Secret":
    • Name: CLERK_WEBHOOK_SECRET
    • Value: (Clerk'ten kopyaladığınız secret)
  4. "Save"

Adım 3: Test Edin

  1. Clerk'te yeni bir test kullanıcısı oluşturun
  2. Hemen database'i kontrol edin:
SELECT id, email, username, role, clerk_user_id, created_at 
FROM profiles 
ORDER BY created_at DESC 
LIMIT 5;
  1. Yeni profile görünmelidir

Çözüm 2: Mevcut Kullanıcıları Senkronize Edin

Eğer Clerk'te kullanıcılar var ama database'de yoksa:

Manuel Senkronizasyon

  1. Her kullanıcının en az bir kez giriş yapması gerekir
  2. Giriş yaptıklarında otomatik olarak profile oluşur

Toplu Senkronizasyon (Admin)

Admin olarak giriş yapın ve aşağıdaki script'i çalıştırın:

// Browser console'da çalıştırın
async function syncClerkUsers() {
  const response = await fetch('https://api.clerk.com/v1/users', {
    headers: {
      'Authorization': 'Bearer YOUR_CLERK_SECRET_KEY',
      'Content-Type': 'application/json'
    }
  });
  
  const users = await response.json();
  
  for (const user of users) {
    const email = user.email_addresses[0]?.email_address;
    if (!email) continue;
    
    // Check if profile exists
    const { data: existing } = await supabase
      .from('profiles')
      .select('id')
      .eq('clerk_user_id', user.id)
      .maybeSingle();
    
    if (!existing) {
      // Create profile
      await supabase.from('profiles').insert({
        clerk_user_id: user.id,
        email: email,
        username: user.username || email.split('@')[0],
        full_name: `${user.first_name || ''} ${user.last_name || ''}`.trim(),
        avatar_url: user.image_url,
        role: 'user',
        is_active: true
      });
      console.log('✅ Created profile for:', email);
    }
  }
}

syncClerkUsers();

Çözüm 3: Email Doğrulama Ayarlarını Kontrol Edin

  1. Clerk Dashboard → User & Authentication → Email, Phone, Username
  2. Email ayarlarını kontrol edin:
    • "Require email verification" kapalı olmalı (test için)
    • Veya kullanıcılar email doğrulamasını tamamlamalı

Çözüm 4: Hata Loglarını Kontrol Edin

Browser Console

  1. Uygulamayıın
  2. F12 → Console
  3. Yeni kullanıcı kaydı yapın
  4. Hata mesajlarını arayın:
❌ Error creating profile in useAuth
❌ Profile creation failed

Supabase Logs

  1. Supabase Dashboard
  2. Logs → Edge Functions
  3. clerk-webhook fonksiyonunu seçin
  4. Son hataları kontrol edin

📊 Test Senaryoları

Test 1: Yeni Kullanıcı Kaydı (Webhook Var)

1. Clerk'te kayıt ol
   ↓
2. Webhook tetiklenir
   ↓
3. clerk-webhook edge function çalışır
   ↓
4. Profile database'e eklenir ✅
   ↓
5. Kullanıcı giriş yapar
   ↓
6. Profile bulunur ✅

Test 2: Yeni Kullanıcı Kaydı (Webhook Yok)

1. Clerk'te kayıt ol
   ↓
2. Email doğrulama (varsa)
   ↓
3. Giriş yap
   ↓
4. useClerkAuthImplementation hook çalışır
   ↓
5. Profile oluşturulur ✅

Test 3: Mevcut Kullanıcı Girişi

1. Clerk'te kayıtlı kullanıcı giriş yapar
   ↓
2. useClerkAuthImplementation hook çalışır
   ↓
3. Clerk ID ile profile aranır
   ↓
4. Bulunamazsa email ile aranır
   ↓
5. Bulunamazsa yeni profile oluşturulur ✅

🔧 Troubleshooting Komutları

Database'de Clerk Kullanıcılarını Kontrol Et

-- Tüm Clerk kullanıcıları
SELECT id, email, username, role, clerk_user_id, created_at 
FROM profiles 
WHERE clerk_user_id IS NOT NULL 
ORDER BY created_at DESC;

-- Son 24 saatte oluşturulan profiller
SELECT id, email, username, role, clerk_user_id, created_at 
FROM profiles 
WHERE created_at > NOW() - INTERVAL '24 hours'
ORDER BY created_at DESC;

-- Clerk ID'si olmayan profiller
SELECT id, email, username, role, created_at 
FROM profiles 
WHERE clerk_user_id IS NULL 
ORDER BY created_at DESC;

Webhook Loglarını Kontrol Et

-- Supabase Dashboard → Logs → Edge Functions → clerk-webhook
-- Son 100 log kaydını görüntüle

Profile Oluşturma Hatalarını Kontrol Et

// Browser console'da
localStorage.getItem('supabase.auth.token')
// Token varsa kullanıcı giriş yapmış

📝 Sonuç ve Öneriler

Hemen Yapılması Gerekenler

  1. Webhook yapılandırın (5 dakika)
  2. Test kullanıcısı oluşturun (2 dakika)
  3. Database'i kontrol edin (1 dakika)

Uzun Vadeli Öneriler

  1. Email doğrulama ayarlarını optimize edin
  2. Hata loglarını düzenli kontrol edin
  3. Kullanıcı onboarding sürecini iyileştirin
  4. Webhook monitoring ekleyin

Beklenen Sonuç

Webhook yapılandırıldıktan sonra:

  • Yeni kullanıcılar kayıt anında database'e eklenir
  • Giriş yapmadan önce profil oluşur
  • Admin panelinde hemen görünür
  • Provider kaydı sorunsuz çalışır

🆘 Hala Çalışmıyor mu?

Eğer webhook yapılandırdıktan sonra hala çalışmıyorsa:

  1. Webhook Secret'i kontrol edin:
# Supabase Dashboard → Settings → Edge Functions → Secrets
# CLERK_WEBHOOK_SECRET var mı?
  1. Endpoint URL'i kontrol edin:
https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook
  1. Clerk Dashboard'da webhook durumunu kontrol edin:

    • Webhooks → Your endpoint → Recent deliveries
    • Başarılı mı? (200 OK)
    • Hata var mı? (4xx, 5xx)
  2. Edge function loglarını kontrol edin:

    • Supabase Dashboard → Logs → Edge Functions
    • clerk-webhook fonksiyonunu seçin
    • Hata mesajlarını okuyun
  3. Manuel test yapın:

curl -X POST https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook \
  -H "Content-Type: application/json" \
  -H "svix-id: test" \
  -H "svix-timestamp: $(date +%s)" \
  -H "svix-signature: test" \
  -d '{"type":"user.created","data":{"id":"test_user","email_addresses":[{"email_address":"test@example.com"}],"username":"testuser","first_name":"Test","last_name":"User"}}'

Eğer hala sorun devam ediyorsa, lütfen şu bilgileri paylaşın:

  • Browser console hata mesajları
  • Supabase edge function logları
  • Clerk webhook delivery logları