无法应用两个不同的条件,也无法检查密码哈希

问题描述 投票:0回答:1

快速检查一下我想找出的那个。首先,如果我用我的代码伤了你的眼睛,我想道歉,我是两周前才开始使用php,我正在尽我最大的努力运用逻辑:-D

因此仅通过用户配置文件实施了2因素,这意味着如果仍未启用该功能,则用户仍可以成功登录,在启用2事实之后,将重定向他以验证代码。这样说,login.php帖子将需要检查以下内容:

  1. 如果未启用2fac,则检查凭据/密码哈希,然后登录。
  2. 如果启用了2fac,则检查密码是否仍然正确,然后重定向到2factcode.php以进行代码验证。
  3. 如果密码在1或2中不正确,则会出错。

'''

$email=mysqli_real_escape_string($db,$_POST['email']);{


$password=mysqli_real_escape_string($db,$_POST['password']);


$stmt = $db->prepare("SELECT password FROM users WHERE email  = ? AND isEmailConfirmed='1' AND is2facEnabled='0'");
$stmt->bind_param("s", $_POST['email']);

$stmt->execute();
$stmt->bind_result($hash);

//checking hash
if ($stmt->fetch() && password_verify($_POST['password'], $hash)) {


$_SESSION['email'] = $email;


header('location: prod.php');

'''

  • 所以这就是我一直在尝试的调整(不确定是否有意义),如果该语句无效,则因为is2facenabled值为'1',所以未找到任何行,那么我仍然检查密码哈希是否正确,然后去验证2fac代码。*

如果我删除下面的密码检查,那么它将起作用,但是它永远不会检查密码是否正确,如果我将密码保留为原来的样子,那么如果我输入了错误的密码,页面将刷新而不会出现错误,并返回输入凭据。我认为$ _POST有问题,但不确定。

elseif (!$stmt->fetch() && password_verify($_POST['password'], $hash)) {

    header('location: login2factorverification.php');   


}else {
array_push($errors, "Incorrect credentials or email needs verification");


enter code here

我的问题是,我如何完成这些检查并正确登录,请先谢谢您。

关于,MF

php bcrypt verification
1个回答
0
投票

这基本上等于我认为编程的第一条规则:分解问题。

而不是尝试编写一段检查用户的存在,密码和2fac状态的代码,而是一次执行一个:

  • 根据提供的电子邮件地址从数据库中选择详细信息。如果未找到任何行,则说明它们尚未注册,因此您无需执行其他任何操作。
  • 您可以在SQL中包括“已确认地址”检查,也可以在检查其他内容之前将其编写为单独的if语句。
  • 接下来,检查提供的密码是否正确。如果不是,则用户是否启用2fac都没有关系,因为您不会让他们登录。
  • 最后,检查用户是否启用了2fac。如果是这样,请重定向到2fac步骤;否则,请转至步骤2。如果没有,请标记为成功登录。
© www.soinside.com 2019 - 2024. All rights reserved.