2016-02-28 61 views
0

我得到密碼,當我登錄, 當用戶註冊,我的密碼保存爲如何使用php的password_hash()方法..?

$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT); 

不匹配,當用戶登錄我檢查這樣的密碼,

$hash = password_hash($password, PASSWORD_BCRYPT); 
    $this->db->select('password'); 
    $this->db->from('usersdetails'); 
    $this->db->where('email', $email); 
    $this->db->limit(1); 
    $query = $this->db->get(); 
    $passwordcheck = $query->row()->password; 
    if (password_verify($passwordcheck, $hash)) { 
     return true; 
    } else { 
     return false; 
    } 

但它總是返回密碼不匹配..why ????? 任何幫助,非常感謝...

+1

'如果(password_verify($ passwordcheck,$ hash))'你正在檢查''password_hash()'你應該在哪裏檢查你的數據庫和用戶輸入的密碼。並確保在散列保存時列長度爲60+。 –

+0

RTM http://php.net/manual/en/function.password-verify.php –

回答

5

你應該檢查原始的非哈希密碼,因爲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 

當心,當其他哈希在furure被providied,它們可能會導致一個哈希超過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; 
} 
+1

[你把話說出我的嘴巴](http://stackoverflow.com/questions/35683537/how-to-使用-phps-password-hash-method#comment59044498_35683537)* Smokey * ;-) –

+0

下午Ralph @ Fred-ii-很高興今天早上刷你的牙齒 – RiggsFolly

+0

* Mornin'Smokey * –