私は現在、ログイン機能と登録機能を備えた独自のユーザークラスに取り組んでいます。私は主に学習体験のためにこれを行っています。今、私は解決できない問題を抱えています。私の登録機能は次のようになります。
public function createUser($username, $email, $password)
{
$password = trim($password);
//Generate users salt
$user_salt = $this->getRandomHash();
//Salt and Hash the password
$password = $user_salt . $password;
$password = $this->hashData($password);
//Create verification code
$code = $this->randomString();
//Commit values to database here.
$created = "INSERT INTO users (username, email, password, user_salt, is_verified, is_active, verification_code) VALUES ('".$username."','".$email."', '".$password."', '".$user_salt."', 0, 1, '".$code."')";
$created = $this->_database->Set($created);
if($created != false){
return true;
}
return false;
}
hashData は次のようになります。
protected function hashData($data)
{
return hash_hmac('sha512', $data, $this->_siteKey);
}
これは私のログイン機能です:
$password = trim($password);
//Select users row from database base on $email
$selection = "SELECT * FROM users WHERE username='".$username."' LIMIT 1";
$selection = $this->_database->Get($selection);
$row = mysqli_fetch_assoc($selection);
//Salt and hash password for checking
$password = $row['user_salt'] . $password;
$password = $this->hashData($password);
$match = false;
//Check email and password hash match database row
if($username == $row['username'] && $password == $row['password']){
$match = true;
}
ここでの問題は、パスワードを正しく入力したと確信しているにもかかわらず、パスワードが一致しないことです。入力したパスワードをハッシュするために同じソルトを使用しているため、なぜ失敗するのかよくわかりません。多分私はここで何か完全に間違っています...さらにコードが必要な場合はお知らせください。そうでなければ、助けてくれる人に感謝します。