首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bcrypt算法登录失败

bcrypt算法登录失败
EN

Stack Overflow用户
提问于 2017-03-19 23:50:05
回答 1查看 202关注 0票数 0

我使用

代码语言:javascript
复制
password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));

为了我的注册表格。它可以在数据库保存完美,但不能登录。

这是我的登录功能

代码语言:javascript
复制
public function Login($user, $password)
{
    try {
        $db = DB();
        $query = $db->prepare("SELECT id FROM members WHERE user=:user AND password=:password");
        $query->bindParam("user", $user, PDO::PARAM_STR);
        $data = $this->query->single(); 
        $getpass = $data['password'];
        $passv = password_verify($password, $getpass);
        $query->bindParam("password", $passv, PDO::PARAM_STR);
        $query->execute();
        if ($query->rowCount() > 0) {
            $result = $query->fetch(PDO::FETCH_OBJ);
            return $result->id;
        } else {
            return false;
        }
    } catch (PDOException $e) {
        exit($e->getMessage());
    }
}

编辑:

login.php

代码语言:javascript
复制
<?php

// Start Session
session_start();

// Database connection
require __DIR__ . '/database.php';
$db = DB();

// Application library
require __DIR__ . 'inc/functions.php';
$app = new DemoLib();


// check Login request
if (!empty($_POST['login'])) {

    $user = trim($_POST['user']);
    $password = trim($_POST['password']);

    if ($user == "") {
        echo 'Please enter username.';
    } else if ($password == "") {
        echo 'Please enter password.';
    } else {
        $id = $app->Login($user, $password); // check user login
        if($id > 0)
        {
            $_SESSION['id'] = $id; // Set Session
        }
        else
        {
        echo 'Wrong data.';
        }
    }
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-22 12:56:14

您不希望在查询期间试图匹配密码,因为匹配哈希将无法工作。为了验证密码,您需要执行如下操作:

代码语言:javascript
复制
public function Login($user, $password)
{
    try {
        $db = DB();
        $query = $db->prepare("SELECT * FROM members WHERE user=:user"); // get everything for the user
        $query->bindParam("user", $user, PDO::PARAM_STR);
        //$data = $this->query->single(); 
        $data = $query->execute();
        $getpass = $data['password'];
        $passv = password_verify($password, $getpass);

        if ($passv) { // if the password is good
            return $data['id'];
        } else {
            return false;
        }
    } catch (PDOException $e) {
        exit($e->getMessage());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42893792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档