【发布时间】:2012-12-29 20:01:52
【问题描述】:
我已经用这个库正确实现了哈希的创建,只改变了成本值。现在我坚持实际验证用户。对于我当前的系统,我还必须检查用户是否已激活,然后还要启动会话。这就是我所拥有的:
<?php
require('core/init.php');
// Required field names
$required = array('username', 'password');
// Loop over field names, make sure each one exists and is not empty
$error = false;
foreach($required as $field) {
if (empty($_POST[$field])) {
$error = true;
}
}
//This is what will make the password
$form_password = $_POST['password'];
$hash = password_hash($form_password, PASSWORD_BCRYPT);
if ($error) {
echo "Please Check username and password field!";
}
else {
if (password_verify($form_password, $hash)) {
$member_username = $_POST['username'];
$query = $dbh->prepare("SELECT * FROM users WHERE username = :user");
$query->bindParam(':user', $member_username);
$query->execute();
$row = $query->fetch();
if($row['activated'] > 0){
$_SESSION["user_id"] = $row['user_id'];
header("location: login_success.php");
} else {
echo "Account not activated wait for system administrator!";
}
} else {
Echo "Wrong password or username please <a href='index.php'><bold>Retry!</bold></a>";
}
}
如果密码验证实际上是真的,我所做的是运行一个查询。该查询然后获取激活的行以检查该值是否大于 0,如果不是,则未激活用户。
但是我的错误是,无论我输入什么,我都会不断收到错误的密码或用户名,请重试!
我知道密码和用户没有错。我第二次猜测自己是否正确实施了 password_compat 的验证部分。
任何帮助都会很棒。谢谢你。
编辑:
dev-null-dweller 在 cmets 中回答的问题。
问题:我没有意识到我不能将库 $password 和 $hash 变量用作全局变量。所以为了修复它,我创建了变量并且一切正常。谢谢!
【问题讨论】:
-
$password和$hash从何而来? -
这是一个库,它不设置任何全局变量。我在问您是否知道
$password和$hash在您的代码中都未定义。 -
这不是一个真正的问题,它将被关闭。
-
这是疏忽或缺乏普遍理解,不是真正的问题……除此之外,它对整个社区也没有任何帮助(没有建设性)。
-
@RaGe10940 没有暗示您的具体问题。但是这句话是有缺陷的。相信我:有很多愚蠢的问题。
标签: php validation authentication pdo cryptography