首页 > 解决方案 > 如何在我的 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)”,但它仍然不起作用。我搜索并尝试将它们应用于它,但它仍然不起作用

标签: php

解决方案


假设您将来自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']);
}

推荐阅读