Isu pencincangan kata laluan dalam PHP - password_verify() sentiasa mengembalikan palsu
P粉481035232
2023-07-30 14:51:07
<p>Saya menghadapi masalah dengan pencincangan kata laluan dalam PHP. Saya menggunakan fungsi password_hash() untuk mencincang kata laluan pentadbir semasa mendaftar dan menyimpannya dalam pangkalan data. Walau bagaimanapun, apabila log masuk, apabila saya cuba mengesahkan kata laluan menggunakan password_verify(), ia sentiasa mengembalikan palsu, walaupun saya pasti kata laluan itu betul. </p><p>Berikut ialah ringkasan kod saya: </p><p><br /></p>
<pre class="brush:php;toolbar:false;">$adminPassword = "test123";
$adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT);
// ... Simpan $adminPasswordHash dalam pangkalan data ...
// Semasa log masuk:
$adminInputPassword = "test123";
$adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm";
if (password_verify ($adminInputPassword, $adminPasswordHashVERIFY)) {
echo "Kata laluan betul!";
} lain {
echo "Kata laluan tidak betul!";
}</pre>
<p>Saya memastikan $adminPassword dan $adminInputPassword mempunyai nilai yang sama, tetapi pengesahan sentiasa mengembalikan palsu. Saya juga cuba menggunakan fungsi password_hash() dan lulus PASSWORD_DEFAULT sebagai parameter dan bukannya PASSWORD_BCRYPT, tetapi hasilnya adalah sama. </p><p>Adakah saya kehilangan sesuatu semasa penjanaan cincang atau proses pengesahan? Sebarang bantuan atau pandangan tentang isu ini amat dihargai. Terima kasih! </p><p><br /></p>
Saya jumpa masalahnya! Masalahnya nampaknya disebabkan oleh penggunaan petikan berganda (") dalam pembolehubah $adminPasswordHashVERIFY. Apabila petikan berganda digunakan, PHP mentafsir rentetan dan menggantikan pembolehubah di dalamnya. Memandangkan tiada pembolehubah bernama $fReIQ, PHP merawatnya sebagai pembolehubah yang ditakrifkan, mengakibatkan nilai cincangan yang salah semasa mengesahkan
Untuk menyelesaikan isu ini, gunakan petikan tunggal (') di sekitar kata laluan yang dicincang dalam pembolehubah $adminPasswordHashVERIFY Ini memastikan bahawa kata laluan yang dicincang dianggap sebagai rentetan biasa . Daripada ditafsirkan oleh PHP
Sekarang jika anda mencuba kod berikut anda akan mendapat output "Kata laluan betul! ".