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

285 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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](https://dashboard.clerk.com) → Webhooks
2. "Add Endpoint" butonuna tıklayın
3. Endpoint URL:
```
https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook
```
4. Events seçin:
-`user.created`
-`user.updated`
-`user.deleted`
5. "Create" butonuna tıklayın
6. **Signing Secret**'i kopyalayın (örn: `whsec_xxxxx`)
#### Adım 2: Webhook Secret'i Supabase'e Ekleyin
1. [Supabase Dashboard](https://supabase.com/dashboard/project/pkycoiknpdwzkarqelai)
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:
```sql
SELECT id, email, username, role, clerk_user_id, created_at
FROM profiles
ORDER BY created_at DESC
LIMIT 5;
```
3. 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:
```typescript
// 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](https://dashboard.clerk.com) → 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](https://supabase.com/dashboard/project/pkycoiknpdwzkarqelai)
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
```sql
-- 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
```sql
-- Supabase Dashboard → Logs → Edge Functions → clerk-webhook
-- Son 100 log kaydını görüntüle
```
### Profile Oluşturma Hatalarını Kontrol Et
```javascript
// 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**:
```bash
# Supabase Dashboard → Settings → Edge Functions → Secrets
# CLERK_WEBHOOK_SECRET var mı?
```
2. **Endpoint URL'i kontrol edin**:
```
https://pkycoiknpdwzkarqelai.supabase.co/functions/v1/clerk-webhook
```
3. **Clerk Dashboard'da webhook durumunu kontrol edin**:
- Webhooks → Your endpoint → Recent deliveries
- Başarılı mı? (200 OK)
- Hata var mı? (4xx, 5xx)
4. **Edge function loglarını kontrol edin**:
- Supabase Dashboard → Logs → Edge Functions
- clerk-webhook fonksiyonunu seçin
- Hata mesajlarını okuyun
5. **Manuel test yapın**:
```bash
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ı