php - 如何在我的 php 上应用 bcrypt
问题描述
DBOperations.php
public function userLogin($username, $pass){
$password = $pass;
$stmt = $this->conn->prepare("SELECT s_id FROM students WHERE s_id = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}
用户登录.php
<?php
require_once '../include/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['id'] = $user['id'];
$response['firstname'] = $user['firstname'];
$response['lastname'] = $user['lastname'];
$response['middlename'] = $user['middlename'];
$response['s_id'] = $user['s_id'];
}else{
$response['error'] = true;
$response['message'] = "Invalid username or password";
}
}else{
$response['error'] = true;
$response['message'] = "Required fields are missing";
}
}
echo json_encode($response);
我已经尝试过“password_hash($pass, PASSWORD_BCRYPT)”,但它仍然不起作用。我搜索并尝试将它们应用于它,但它仍然不起作用
解决方案
假设您将来自password_hash()的哈希存储在数据库中。
选择用户名的密码,然后使用password_verify()进行检查。
<?php
public function userLogin($username, $pass) {
$stmt = $this->conn->prepare("SELECT password FROM students WHERE s_id = ? LIMIT 1");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 0) {
return false;
}
$row = $result->fetch_array(MYSQLI_ASSOC);
return password_verify($pass, $row['password']);
}
推荐阅读
- sql - 为什么使用日期值时,IIF 和 ISNULL 的返回结果与我的预期不符?
- sql - 我如何让这个 SQL 语句写入一个空的 Excel 表中,以获取第一个之外的行?
- laravel - 唯一规则,忽略空值
- angular - 为什么 Angular httpClient 返回的是 Observable 而不是 Promise?
- java - 如何使用拆分字符串()在 GUI 中为科学计算器的相等按钮编写代码?
- angular - 自定义组件获取错误无法绑定到“ngModel”,因为它不是“ion-select”的已知属性
- javascript - 检查数组是否包含2个不同值的最快方法?
- java - 为通用队列类创建 toString() 方法时出现逻辑错误
- java - Spring Boot 和 Lets Encrypt 没有共同的密码套件
- python - 如何通过运行 docker-compose 知道主机 IP