你好,世界!实现password_verify

时间:2018-01-21 17:43:11

标签: php passwords

进入php并制作登录脚本一切正常但是 我在signup.php中记录了Bcrypt中的密码,所以我有问题输入密码使它匹配所以我研究了VERIFY_PASSWORD但是我如何在我自己的脚本上实现它? 澄清我是否只是从表中复制哈希作为密码它的工作,但我希望它工作正常输入_POST密码, 欢迎ani输入

的login.php

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
require 'database.php';

$username = $_POST["username"];
$password = $_POST["password"];

$sql = "SELECT * FROM table2 WHERE username = '".$username."' AND password = '$password'";
$result = $conn->query($sql);
$result->execute();
$count = $result->fetchcolumn();
var_dump($result);///if($result === FALSE) { 
if($count == 1 ){
    echo"login";
    header("location:login4.php");
} else { var_dump($count);
    echo"logout";
}  // die(mysql_error()); // TODO: better error handling
///}

///while($row = mysql_fetch_array($result))
///{
   /// echo $row['username'];
///}
///if(!$row = mysqli_fetch_assoc($result)) {
/// echo "dd";


//else {
//  echo "logged in";



?>

<html>



<form action="login3.php" method="post">

<input type="text" name="username">
<input type="password" name="password">
<button type="submit" name="submit">login</button>

</html>

1 个答案:

答案 0 :(得分:0)

首先,您只需使用“WHERE username =”。执行请求时,您无需检查密码。

其次,您必须验证密码。

最后,你还应该使用预备语句,它更安全。

因此,您的代码应该如下所示(提供的代码可能无法按原样使用,但您可以调整它以获得您想要的结果并阅读文档以了解预准备语句以及password_verify如何工作):

$sql = "SELECT * FROM table2 WHERE username = :username";
$request = $conn->prepare($sql);
$request->execute([":username" => $_POST["username"]]);  
$user = $request->fetchAll()[0];

if(password_verify($_POST["password"], $user->password)){
    //user is logged in
}else{
    //password is wrong
}