Slaptažodžio keitimas PHP
Slaptažodžio keitimo negalima tiesiog atlikti asmeniniame kabinete. Esmė ta, kad vartotojas gali palikti savo kompiuterį be priežiūros (pavyzdžiui, ofise), būdamas autorizuotas mūsų svetainėje. Tokiu atveju, jei leistume tiesiog keisti slaptažodį, tai piktavalis-nekenčiantis galės pakeisti slaptažodį į kitą, kas, žinoma, yra labai blogai.
Būtina padaryti taip, kad slaptažodžio pakeitimas į naują reikalautų seno slaptažodžio įvedimo.
Įgyvendinkime puslapį changePassword.php,
į kurį patekęs vartotojas pamatys formą
su dviem įvesties laukais - į pirmąjį jis turės
įvesti savo seną slaptažodį, o į antrąjį - naują:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Paspaudus siuntimo mygtuką mes turime atlikti šiuos veiksmus:
<?php
$id = $_SESSION['id']; // vartotojo id iš sesijos
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // druskuotas slaptažodis iš DB
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Tikriname atitiktį tarp hash'o iš duomenų bazės ir įvesto seno slaptažodžio
if (password_verify($oldPassword, $hash)) {
$newPasswordHash = password_hash($newPassword, PASSWORD_DEFAULT);
$query = "UPDATE users SET password='$newPasswordHash' WHERE id='$id'";
mysqli_query($link, $query);
} else {
// senas slaptažodis įvestas neteisingai, išvesime pranešimą
}
?>
Įgyvendinkite aprašytą slaptažodžio keitimą.