簡體   English   中英

與md5密碼不匹配

[英]Not matching md5 passwords

我正在使用jQuery datagrid插件來制作一個簡單的工具來編輯網站管理區域中的用戶表。 用戶注冊時,我將密碼存儲為md5()。 每當我嘗試更新表時,它都會重新加密密碼,從而使其無法使用。 我嘗試了幾種方法來驗證密碼與數據庫中的密碼相同,但是似乎都不起作用。

這是我的更新代碼:

的PHP

<?php
require_once("../class/TimeClock.class.php");

$tc = new TimeClock();
$id = $_POST['id'];
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$active = $_POST['active'];
$role = $_POST['role'];
$emp_id = $_POST['emp_id'];

if($tc->validatePass($id, $password)) {
try {
    $tc->connect();
    $query = $tc->dbh->prepare("UPDATE us_users SET username=:username,email=:email,active=:active,role=:role,emp_id=:emp_id WHERE id=:id");
    $query->execute(array(':username' => $username, ':email' => $email, ':active' => $active, ':role' => $role, ':emp_id' => $emp_id, ':id' => $id));
    $tc->close();
} catch (PDOException $e) {
    throw new Exception('Something bad happened' . $e->getMessage());
}
} else {
try {
    $password = md5($password);
    $tc->connect();
    $query = $tc->dbh->prepare("UPDATE us_users SET username=:username,password=:password,email=:email,active=:active,role=:role,emp_id=:emp_id WHERE id=:id");
    $query->execute(array(':username' => $username, ':password' => $password, ':email' => $email, ':active' => $active, ':role' => $role, ':emp_id' => $emp_id, ':id' => $id));
    $tc->close();
} catch (PDOException $e) {
    throw new Exception('Something bad happened' . $e->getMessage());
}
}

echo json_encode(array(
'id' => $id,
'username' => $username,
'password' => $password,
'email' => $email,
'active' => $active,
'role' => $role,
'emp_id' => $emp_id
));
?> 

我的validatePasss()函數:

的PHP

function validatePass($id, $pass) {
    try {
    $this->connect();
    $result = $this->dbh->prepare("SELECT username, password FROM us_users WHERE id=:id");
    $result->execute(array(':id' => $id));
    $userObj = $result->fetch(PDO::FETCH_ASSOC);
    } catch( PDOException $e) {
        throw new Exception('Something bad happened' . $e->getMessage());
        die();
    }
    if($pass == $userObj['password']) {
        return true;
    } else {
        return false;
    }
    $this->close();
}

我知道mysql_代碼已過時,但是,當我嘗試使用PDO時會引發錯誤,我認為它與組件或某些東西有關。

感謝您提供的任何幫助。

編輯:將函數更改為純PDO,這是數據網格的圖像,因此您會看到密碼存儲為哈希,除非更改,否則應將其傳遞給更新腳本,以匹配數據庫中的內容。

http://www.bolinconstruction.com/timeclock/datagrid.png

validatePass()函數中,您必須先對密碼進行哈希處理,然后再進行比較

if(md5($pass) == $userObj['password']) {
    return true;
} else {
    return false;
}

您可以在查詢中執行相同的操作

select id
from from us_users
where username = :username and password = :password

接着

$result->execute(array(':username' => $username, ':password' => md5($password)));

並測試行數> 0。

經過深思熟慮,答案實際上很簡單。 在初始代碼中,我在數據庫中查詢與表單一起提交的用戶名的密碼。 如果更改了用戶名,則查詢當然會失敗,從而更改密碼。 通過將其設置為根據ID輪詢數據庫,該問題似乎已得到糾正。 謝謝大家的幫助,沒有你們,我永遠都不會想到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM