raptiye kod depoları

roketSanırım bu konuyu raptiye'de daha önce dile getirmedim. Geçtiğimiz haftalarda raptiye üzerinde tuttuğum kod depolarına ait Trac'i, şu ana kadar benim dışımda kimsenin ilgi göstermemesi nedeniyle kapattım. Fırsatım ve motivasyonum olursa projeler sayfasında kodların nasıl indirilebileceğini yazacağım. Hatta bunu askere gitmeden önce yapsam iyi olur.

Bildiğiniz gibi yaklaşık 1.5 aydır vidiluck adındaki proje üzerinde çalışıyoruz ekip olarak. Önümüzdeki hafta üyelik ve ödeme sistemlerini yetiştirebilmek için kampa gireceğiz. Öncesindeyse olabildiğince hata temizliği ve acil özelliklerin eklenmesi konusunda çalışıyoruz. Bir kaç gün önce ekip arkadaşlarımdan Ayça, giriş formu üzerinde çalışırken içinden çıkamadığı bir hatayı bana sordu ve daha detaylı bakarken kodda ciddi bir hata yaptığımızı farkettim. Bunu yazıyor olmamın sebebi oradaki kodu raptiye'den almış olmamızdı.

Normalde django'da bir kullanıcıyı veritabanına eklerken şöyle bir yol izlemek lazım:

new_user = User.objects.create_user('kullanici_adi', 'eposta@adresi', 'sifre')
new_user.first_name = 'Kullanici'
new_user.last_name = 'Adi'
new_user.save()

raptiye'de bu işi bir defada hızlıca yapmak adına bu bilgiyi bir sözlüğe atıp, User nesnesinin yapıcısına (constructor) gönderiyordum:

dict = {
  'username': 'kullanici_adi',
  'email': 'eposta@adresi',
  'password': 'sifre',
  'first_name': 'Kullanici',
  'last_name': 'Adi'
}

new_user = User(**dict)
new_user.save()

Normalde herhangi bir sınıfa geçeceğiniz parametreleri bu şekilde geçmenizde bir sakınca yok. Ancak django'nun User modelinin yapıcısı, kullanıcı bilgilerini bu şekilde geçtiğinizde şifreyi açık olarak kaydediyor; MD5 karşılığını (hash) oluşturmuyor. Bu da şifre doğrulama kısmında; yani giriş formunda başarısız olmanıza neden oluyor.

Hatayı farkettikten sonra anlayamadığım şey; vidiluck ve django shell'de tekrarlayabildiğim bu sorunun raptiye'de hiç karşıma çıkmamış olmasıydı. Hiç bir ziyaretçi şu ana kadar raptiye'de kayıt olduktan sonra böyle bir sorunla karşılaştığından bahsetmemişti. django'nun kaynak kodlarında auth paketine baktığımda da her şey beni doğrular nitelikteydi ama raptiye'de her şey normaldi. Kendimden o kadar emindim ki; arada django'nun SVN deposunda bir hata düzeltildiğini ve sorunun bundan kaynaklanabileceğini düşünmeye başladım.

Taa ki bir süre sonra şifreyi bir başka yerde django yollarını kullanarak kaydedip kaydetmediğimi düşünene kadar... Farkettim ki; raptiye'nin iyi niyetli kullanıcıları siteye kayıt olduktan sonra şifrelerini yanlış girdiklerini düşünüp "şifremi unuttum" bağlantısına tıklıyorlardı. Bu işlem sonucunda django yeni bir MD5 şifre karşılığı yaratıyor ve ziyaretçiler de giriş yapıp şifrelerini profillerinden "doğru yolla" değiştirebiliyorlardı. Bu zamana kadar bu hatayı farketmemiş olmama inanamıyorum gerçekten.. Farketmemi sağladığı için Ayça'ya teşekkür ediyorum ve de.. Aksaklık yaşattığım raptiye ziyaretçilerinden de özür diliyorum.