現在、ユーザーの古いパスワードを確認するための検証プロセスを行っていますが、問題は、クエリが 1 行あると予想される場所でゼロ行を返す理由がわからないことです。もう1つ、パスワードテキストをmd5に変換しなくても、ハッシュされたパスワードは正しい答えを取得し、なぜそれが起こるのかわかりません。これまでの私のコードは次のとおりです。
public function validate_oldpassword($username,$password)
{
$this->db->select('user_salt');
$query = $this->db->get_where('login',array('username' => $username));
if ($query->num_rows() == 1)
{
foreach ($query->result() as $row)
{
$password2 = hash("sha256",$password.$row->user_salt);
$this->db->flush_cache();
$query = $this->db->get_where('login', array('username' => $username, 'password' => $password2));
//return $this->db->last_query();
return $query->num_rows();
if($query->num_rows()==1){
return "YEHEY";
}else{
return "NO";
}
}
}
}
クエリも確認したところ、次の正しいクエリが返されます。
SELECT * FROM (`login`) WHERE `username` = 'kahel' AND `password` = 'f91d20d381426ea56e57da9ab23d0c568b8f934c3ff313e1bbf6c28a4fee758a'
私のパスワードはtest
saltでXgvT7F~(CYr#*0E1^UI@xkqJ5GcAO8BHsotZpf+WQ!4&ja2y%NdelLmhPSnRw9)zDK63VMuib
、保存されたパスワードはf91d20d381426ea56e57da9ab23d0c568b8f934c3ff313e1bbf6c28a4fee758a
私を最も悩ませているのは、ログインページ機能ですべてがうまく機能することです。これが私のログインコード関数です:
public function get_login_credentials($username,$password)
{
$this->db->select('user_salt');
$query = $this->db->get_where('login',array('username' => $username));
if ($query->num_rows() == 1)
{
foreach ($query->result() as $row)
{
$password = hash("sha256",md5($password).$row->user_salt);
$query = $this->db->get_where('login', array('username' => $username, 'password' => $password));
return $query->num_rows();
}
}
}
ゼロ行を返す理由がよくわかりません。