2017-01-09 62 views
0

我正在註冊和登錄頁面上工作。 它總是說密碼不正確。我究竟做錯了什麼? 我也試過用iterator_to_array,它也不起作用。如何在MongoDB和php中驗證密碼?

$db = get_db(); 

       $mojlogin = $_POST['login']; 
       $mojehaslo = $_POST['haslo']; 
       empty($mors); 
       $mors = $db->morsy->findOne(array('login' => $mojlogin, "haslo1" => $mojehaslo)); 


       if(password_verify($mojehaslo, $mors['haslo1'])){ 

        echo "Zalogowany!\n"; 
        $powitanie = "Witaj ponownie, ".$mojlogin."!"; 

        echo "<h1 class='tytul'>$powitanie</h1>"; 
        $_SESSION["user"] = $mojlogin; 
       } else { 
        echo "Niepoprawny login lub hasło!\n"; 


       } 
+0

'password_verify'方法的定義是什麼? – dikesh

+0

你的意思是像「它檢查密碼是否與散列相匹配」? 我沒有睡在22小時,請溫柔。 –

+0

對不起,我不苛刻。我只想看看'password_verify'方法的代碼。 – dikesh

回答

1

據我可以從你的代碼告訴,您所請求的用戶密碼,並用它作爲搜索條件,從數據庫,這意味着這不是存儲密碼的哈希得到他的賬戶,您存儲密碼本身。

正確的方式做,這是首先產生亂碼,它存儲在haslo1場,然後在password_verify功能$mojehaslo使用它作爲第二個參數與實際的密碼一起作爲第一個。此外,在findOne()查詢中僅使用$mojlogin,因爲該想法是從數據庫中獲取與用戶登錄對應的散列,並將其與輸入的密碼進行比較。

通常要使用password_hash功能來生成散列:

$hash = password_hash($password, PASSWORD_DEFAULT); 

然後,你把它放在haslo1文件後場,可以使用幾乎相同的代碼之前一樣:

$mors = $db->morsy->findOne([ 'login' => $mojlogin ]); 
if (password_verify($mojehaslo, $mors['haslo1'])) { 
    // here goes your entrance code 
} 
+0

我存儲散列,我檢查了這一點。但是謝謝你的幫助! –

0

檢查var_dump,始終。

沒有得到我的登錄後,我的朋友告訴我使用:

var_dump(iterator_to_array($db->morsy->find())) 

我登錄前的白色空間,因爲在形式的錯誤。

+0

現在解決了嗎? – dikesh

+0

是的。 :)登錄代碼很好 - 雖然不是來自這裏的版本,我的第一個。 –