7.9 KiB
7.9 KiB
Clerk Üyelikleri Database'de Görünmüyor - Kesin Çözüm
✅ Durum Tespiti
Clerk Yapılandırması: ✅ AKTIF
clerk_publishable_keydatabase'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
- Clerk Dashboard → Webhooks
- "Add Endpoint" butonuna tıklayın
- Endpoint URL:
https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook
- Events seçin:
- ✅
user.created - ✅
user.updated - ✅
user.deleted
- ✅
- "Create" butonuna tıklayın
- Signing Secret'i kopyalayın (örn:
whsec_xxxxx)
Adım 2: Webhook Secret'i Supabase'e Ekleyin
- Supabase Dashboard
- Settings → Edge Functions → Secrets
- "Add Secret":
- Name:
CLERK_WEBHOOK_SECRET - Value: (Clerk'ten kopyaladığınız secret)
- Name:
- "Save"
Adım 3: Test Edin
- Clerk'te yeni bir test kullanıcısı oluşturun
- Hemen database'i kontrol edin:
SELECT id, email, username, role, clerk_user_id, created_at
FROM profiles
ORDER BY created_at DESC
LIMIT 5;
- 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
- Her kullanıcının en az bir kez giriş yapması gerekir
- 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
- Clerk Dashboard → User & Authentication → Email, Phone, Username
- 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
- Uygulamayı açın
- F12 → Console
- Yeni kullanıcı kaydı yapın
- Hata mesajlarını arayın:
❌ Error creating profile in useAuth
❌ Profile creation failed
Supabase Logs
- Supabase Dashboard
- Logs → Edge Functions
clerk-webhookfonksiyonunu seçin- 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
- ✅ Webhook yapılandırın (5 dakika)
- ✅ Test kullanıcısı oluşturun (2 dakika)
- ✅ Database'i kontrol edin (1 dakika)
Uzun Vadeli Öneriler
- ✅ Email doğrulama ayarlarını optimize edin
- ✅ Hata loglarını düzenli kontrol edin
- ✅ Kullanıcı onboarding sürecini iyileştirin
- ✅ 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:
- Webhook Secret'i kontrol edin:
# Supabase Dashboard → Settings → Edge Functions → Secrets
# CLERK_WEBHOOK_SECRET var mı?
- Endpoint URL'i kontrol edin:
https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook
-
Clerk Dashboard'da webhook durumunu kontrol edin:
- Webhooks → Your endpoint → Recent deliveries
- Başarılı mı? (200 OK)
- Hata var mı? (4xx, 5xx)
-
Edge function loglarını kontrol edin:
- Supabase Dashboard → Logs → Edge Functions
- clerk-webhook fonksiyonunu seçin
- Hata mesajlarını okuyun
-
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ı