невозможно применить два разных условия, а также проверить хеш пароля - PullRequest
0 голосов
/ 30 мая 2020

Быстрая проверка того, что я пытаюсь выяснить. Прежде всего, я хочу извиниться, если я повредил вам глаза своим кодом, я только что начал две недели go с php, и я стараюсь изо всех сил применять logi c: -D

Таким образом, 2-фактор был просто реализован через профиль пользователя, что означает, что если функция все еще не включена, пользователь все еще может успешно войти в систему, после того, как 2-й факт будет включен, он будет перенаправлен для проверки кода. с учетом этого логина. php post необходимо будет проверить следующее:

  1. Если 2fa c не включен, проверьте учетные данные / пароль ha sh, затем войдите.
  2. Если 2fa c включен, проверьте, верен ли пароль, затем перенаправьте на 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', тогда я все еще проверяю, правильный ли пароль ha sh, затем go, чтобы проверить код 2fa c. *

Если я удалю проверку пароля ниже, она работает, но она никогда не проверяет, правильный ли пароль, если я оставлю его таким, как есть, тогда, если я введу неправильный пароль, страница refre sh без ошибок и вернется, чтобы ввести учетные данные . Я думаю, что у него проблема с $ _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

Мой вопрос: как мне выполнить sh эти проверки и правильно войти в систему, заранее спасибо.

С уважением, MF

1 Ответ

0 голосов
/ 30 мая 2020

Это в основном сводится к тому, что я считаю первым правилом программирования: сломайте проблему.

Вместо того, чтобы пытаться написать один фрагмент кода, который проверяет существование пользователя, пароль и статус 2fa c, делайте по одному:

  • Выберите детали из базы данных на основе на предоставленный адрес электронной почты. Если строки не найдены, они не зарегистрированы, поэтому больше ничего делать не нужно.
  • Вы можете включить проверку «адрес подтвержден» в SQL или написать ее как отдельный оператор if, прежде чем проверять что-либо еще.
  • Затем проверьте правильность предоставленного пароля. Если это не так, не имеет значения, включен ли у пользователя 2fa c или нет, потому что вы не позволите ему войти в систему.
  • Наконец, проверьте, есть ли у пользователя 2fa c включен. Если да, перенаправьте на шаг 2fa c; если нет, отметьте их как успешно вошедшие в систему.
...