【发布时间】:2019-09-22 14:37:10
【问题描述】:
我正在尝试为我的网站创建一个 API,为此我创建了一个函数。但是该功能无法使用 POST 功能在 POSTMAN 中验证我的密码。我一生都无法理解我错在哪里。
数据库中的密码是使用php hash function放置的:
$password =password_hash($pass, PASSWORD_DEFAULT);
。
public function userLogin($username, $password){
$stmt = $this->con->prepare("SELECT password FROM farms WHERE farmname = ? ");
$stmt->bind_param("s", $username);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
$hash = $row['password'];
if (password_verify($hash, $password)) {
return $stmt->num_rows > 0;
}
}
登录.php 文件
require_once '../includes/DbOperations.php';
$response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(isset($_POST['username']) and isset($_POST['password'])){
$db = new DbOperations();
if($db->userLogin($_POST['username'], ($_POST['password']))){
$user = $db->getUserByUsername($_POST['username']);
$response['error'] = false;
$response['username'] = $user['farmname'];
}else{
$response['error'] = true;
$response['message'] = "Invalid username or password";
}
}else{
$response['error'] = true;
$response['message'] = "Required fields are missing";
}
}
echo json_encode($response);
我没有得到用户名,而是不断收到错误消息:
{"error":true,"message":"无效的用户名或密码"}
【问题讨论】:
-
附注:PDO 中的绑定参数应该是这样的:
$stmt->bindparam(1,$username);如果您使用的是问号 -
没有@K.P.它不应该。 OP的做法是正确的
-
尝试打印
$hash并检查它是否返回正确的值。 -
你的注册功能是如何工作的
-
下面还有一些关于在你的登录中有一个 else 块的讨论,这不会解决你在这种情况下的错误,但目前如果 password_verify 失败,你的函数根本不会返回任何东西,因此,无论哪种方式,您都可能确实想要某种响应。我可能只是说 return password_verify(.... 然后你总是会从你的函数中得到一些反馈。
标签: php function mysqli postman