Selamlar,
Admin ve kullanıcı tarafında da parola güncelleştirilen bir user tablosu var.
Admin tarafında kaydedilen hash değeri, ::check deyince başarılı bir şekilde çalışırken, kullanıcı tarafından kaydedilen hash değerini ::check deyince parola doğru da olsa yanlış diyor.
Sorguları birebir iki tarafta da deneyip çalıştırdım ve sorguların aynı olduğunu, DB'ye başarılı bir şekilde yazdırıldığını kontrol ettim. (her şey aynı)
kaydederken:
$password = Hash::make($request->password);
kontrol ederken:
if(!Hash::check("yalın", "hashli"))
Yani bir şekilde, admin tarafından şifrelenen parola (hash) farklı, user tarafından hash'lenen farklı. Anladığım kadarıyla farklı anahtarlar kullanıyor iki tarafta da
Bunu nasıl çözebilriim?
Teşekkürler.
Laravel'de ilginç bir hash::make/check (key) sorunu
11
●503
- 31-10-2018, 22:53:05LORDD adlı üyeden alıntı: mesajı görüntüle
https://laravel.com/docs/5.0/hashing
Kullandığın sürüm nedir hocam? 5.0 için laravel dökümanlarında örneği var birde şu link var
https://stackoverflow.com/questions/...s-return-false - 31-10-2018, 23:00:19Selamlar,Modexi adlı üyeden alıntı: mesajı görüntüle
Hocam standart uygulama yapısını biliyorum. Zaten admin tarafından oluşturunca başarılı bir şekilde çalışıyor, guest tarafındaki class'tan oluşturursam çalışmıyor.
Tespit ettiğim olay şu, admin tarafındaki user class'ında bir şekilde hash yapısı farklı çalışıyor, kullanıcı tarafindaki class'ta farklı çalışıyor. Bunu anlamaya çalışıyorum.
Ver: 5.5 - 31-10-2018, 23:16:32LORDD adlı üyeden alıntı: mesajı görüntüle
5.6 da buna benzer birsey yapmıştım sorun yasatmadi, belki sürümden kaynaklı sorun olabilir, suan PC de degilim isterseniz 5.6 bos olarak çekip en sade sekli ile sorgulari burada çalıştırın. db ye girmeden dd ile son asamada ne gönderiyor bunu da kontrol etmekte fayda var - 31-10-2018, 23:26:03Bendeki de v5.6.5'miş.Modexi adlı üyeden alıntı: mesajı görüntüle
Hocam, bu kısımlarda sorun yok. DB'ye girmeden önce, girdikten sonra vs. hepsini gözden geçirdim. Hatta sorguyu olduğu gibi alıp admin/user class'ında çalıştırdım, sonuç başarılı. Guest/X class'ında aynı sorguyu işleyince ::check başarısız.
Bu da benim aklıma tek bir şey getiriyor: hash'i admin tarafı farklı, guest tarafı farklı oluşturuyor. (örn: key değerini bir şekilde farklı alıyor olabilir.)
::make kısmı 2 farklı yerde (admin ve guest'te) mevcut
::check kısmı sabit tek bir yerde
(admin'den hash'leyip yollayınca ::check doğru çalışıyor.) - 01-11-2018, 00:09:04Controller dosyalarınızın başında kullandığınız Hash kısmını kontrol ettiniz mi? Herhangi birinde farklı kaynak mı kullanılıyor acaba?
Bildiğim kadarıyla şifrelemeler api key üzerinden gerçekleşiyor. İsterseniz yeni bir key oluşturun ve cache vb. temizleme işlemlerini uygulayın. Yedek almanızı öneririm bunları yapmadan önce.
use Illuminate\Support\Facades\Hash;
Yine çözüm bulamazsanız helper yoluyla şifrelemeyi yapan ve check işlemini uygulayan 2 fonksiyon oluşturun ve ayrı yerde kullandığınız şifreleme işlemlerinin tek bir kaynaktan yapıldığını garantileyin derim. Yinede yazdığınız kodları baştan kontrol etmenizi öneririm. Anlattığınız gibi bir sorun sadece hatalı kodlamadan kaynaklanabileceğini düşünüyorum. Mevcut versiyonunuzda aynı işlemleri yaptırmıştım, bir sorun yaşamadım. Şuanda 5.7 üzerinde çalışıyorum yine bir problem yok. - 01-11-2018, 00:26:30Selamlar,strawz adlı üyeden alıntı: mesajı görüntüle
Admin tarafı (doğru çalışan kısmın header'ı):
namespace App\Http\Controllers\Admin;
use App\User; use App\Role; use Illuminate\Http\Request; use Yajra\Datatables\Datatables; use Illuminate\Support\Facades\Hash; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use DB;
Guest tarafındaki header:
namespace App\Http\Controllers\Auth; use Authenticatable; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Hash; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Support\Facades\Validator; use Illuminate\Http\Request; use App\Http\Controllers\Auth\MailController as Mail; use Response; use App\User; use DB; use Cookie;
"helper yoluyla şifrelemeyi yapan ve check işlemini..."
Bu kısım için bir örnek verebilir misiniz, rica etsem?
Teşekkürler. - 01-11-2018, 01:41:23LORDD adlı üyeden alıntı: mesajı görüntüle
Buna geçmeden önce kullanıcı modelinizde şifreyi $fillable dizisinin içine eklediniz mi acaba? Ayrıca ek olarak veritabanında saklanan şifrelenmiş verinin uzunluğuyla ilgili bir problem olup olmadığınıda kontrol eder misiniz?
Model:
. . . protected $table = "Users"; protected $fillable = [ 'username', 'password', ];Ek olarak kontrol etmeniz amaçlı kaba taslak birşey yazdım.
Controller:
. . . $kullaniciadi = "strawz"; $sifre = "1234"; $user= User::where('username', $kullaniciadi)->first(); if($user != NULL){ if(Hash::check($sifre, $user->password)){ return "şifre doğru"; else{ return "şifre yanlış"; } } else{ return "kullanıcı bulunamadı"; }Tam olarak ne yapmaya çalıştığınız anlayamadığım için kaba taslak yardımcı olmaya çalışıyorum. Daha detaylı yardımcı olmak isterdim. Çözüm üretemezseniz tekrardan konu altına yorum atarsanız daha detaylı incelerim. Anladığım kadarıyla kullanıcı kendi şifresini değiştirince problem oluşuyor. Admin o kullanıcının şifresini değiştirince giriş yapılabiliyor. Burada problem 2 sebepten dolayı kaynaklanıyor olabilir;
1- Kullanıcının düzenleme yaptığı alanda şifrelenmiş şifre bilgisi veritabanına doğru şekilde kaydedilmiyor.
2- Hash::check fonksiyonu kullandığınız yerde veritabanından veriyi doğru çekemiyor olabilirsiniz. Kısacası kodlama hatası olabilir.
Gözden kaçan birşey olduğu kesin. Adım adım ilerlemek mantıklı olacaktır. Önce kullanıcının şifresini ekrana yazdırmayı deneyip veritabanındaki değerle aynı olup olmadığını görmenizi ve bu şekilde adım adım ilerleyerek hatayı ayıklamanız tavsiye ederim. - 01-11-2018, 09:06:56Hocam,strawz adlı üyeden alıntı: mesajı görüntüle
Adım adım gitme mantığınızı anlıyorum, olması gereken de bu fakat bu söylediklerinizi kontrol ettim yukarda da bahsi geçiyor belki gözünüzden kaçmış olabilir.
"Anladığım kadarıyla kullanıcı kendi şifresini değiştirince problem oluşuyor. Admin o kullanıcının şifresini değiştirince giriş yapılabiliyor. Burada problem 2 sebepten.."
Doğru, sorun bu.
Üretilen hash ile DB'ye yazılan hash birebir aynı, eksik yazma ya da yanlış yazma söz konusu değil, DB'den gelen hash değeri de doğru (ne yazılmışsa o geliyor) bunu da kontrol ettim.
Emin olduğum şu:
Bir şekilde user tarafında parola değişikliği yapıldığında hash değeri farklı oluşuyor. Dolayısı ile yukarda bahsettiğiniz helper olayına geldi sıra.
Teşekkür ederim.