Proje: Okul Platform · Hub: Okul Platform — Incidents
Semptom
Google ile giriş/kayıt denemesinde SQLSTATE[23000] ... Duplicate entry 'xxx@gmail.com' for key 'users.users_email_unique' hatası. Hata hem yeni kayıt hem tekrar giriş akışında dönüyor; findOrCreateUser → createUser yolunda User::create çağrısı çakışıyor.
Root cause
App\UsermodeliSoftDeleteskullanıyor (app/User.php:151) → global scope trashed satırları gizliyor.users.emailunique index’i DB seviyesinde koşulsuz (database/migration_backup/2014_10_12_000000_create_users_table.php:18→->unique()), yani soft-delete olmuş satırlar da email slot’unu tutuyor.UserController::createUserUser::where('email', …)->first()ile arıyor; trashed kullanıcıyı göremiyor,nulldönüyor, ardındanUser::createDB’de var olan email’e çarpıyor.- Aynı açık
handleSocialCallback’teki$isNewUserprobunda da vardı: trashed hesap silent restore olursa bile “yeni kullanıcı” sayılıp pazarlama izni sayfasına atılabilirdi.
Çözüm
Sosyal giriş lookup’larında withTrashed() + gerekirse restore():
createUser: email lookupwithTrashed();$user->trashed()iserestore()sonraupdate($data).findOrCreateUser:google_id/facebook_idlookup’uwithTrashed(); eşleşen trashed hesap varsa restore et.handleSocialCallback:$isNewUserproblarıwithTrashed()ile, soft-deleted hesap restore edildiğindeuser.social_marketing_consent’e düşmesin.
Ürün kararı: Option A — soft-delete’li hesap sosyal girişte sessizce restore edilir. İleride “hesabı kapatan kullanıcı geri dönerse ne olur?” diye politika değişirse burası tekrar gözden geçirilmeli (GDPR/kapalı hesap guard’ı).
İlgili dosya
app/Http/Controllers/Front/UserController.php—handleSocialCallback,findOrCreateUser,createUser
Related
- 2026-04-14-gaevents-missing-base — başka bir auth/bootstrap gotcha