आपको कच्चे बिना हैश किए गए पासवर्ड को password_verify()
. के रूप में जांचना चाहिए हैशेड पासवर्ड बनाते समय उपयोग किए गए हैश रूटीन का उपयोग करके कच्चे पासवर्ड को फिर से हैशिंग करता है।
यदि आप password_hash()
. का परिणाम देखें तो हैश में जानकारी संग्रहीत है कि इस हैश को बनाने के लिए किस हैश रूटीन का उपयोग किया गया था, और इसे कैसे उत्पन्न किया गया था
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
इस क्षेत्र में एक और आम गलती है कि आप डेटाबेस टेबल पर उपयोग किए जाने वाले कॉलम को हैश का पूरा परिणाम रखने के लिए पर्याप्त वर्ण नहीं दे रहे हैं
PASSWORD_BCRYPT का उपयोग करके उत्पन्न हैश 60 वर्णों का है
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
सावधान रहें, जब अन्य हैश भविष्य में प्रदान किए जाते हैं, तो उनका परिणाम हैश में 60 वर्णों से अधिक लंबा हो सकता है
तो संक्षेप में आपका कोड होना चाहिए
$this->db->select('password');
$this->db->from('usersdetails');
$this->db->where('email', $email);
$this->db->limit(1);
$query = $this->db->get();
$pwd_from_db = $query->row()->password;
if (password_verify($this->input->post('password'), $pwd_from_db)) {
return true;
} else {
return false;
}