“Неверный пароль” при авторизации

165
14 ноября 2018, 19:50

Сделал такую авторизацию. До того зарегистрировал на "сайте" пользователя, его данные сохранились в БД. Логинюсь по е-мэйлу и паролю - вылетает "wrong password",хоть и все правильно.

$.ajax({
  type: "POST",
  url: "include/auth.php",
  data: "email=" + auth_email + "&pass=" + auth_pass + "&rememberme=" + auth_rememberme,
  dataType: "html",
  cache: false,
  success: function(data) {
    if (data == 'yes_auth') {
      location.reload();
    } else {
      $("#message-auth").slideDown(400);
      $(".auth-loading").hide();
      $("#button-auth").show();
    }
  }
});
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  include('db_connect.php');
  include('../functions/functions.php');
  $email = clear_string($_POST["email"]);
  $pass = md5(clear_string($_POST["pass"]));
  $pass = strrev($pass);
  $pass = strtolower("9nm2rv8q".$pass.
    "2yo6z");
  if ($_POST["rememberme"] == "yes") {
    setcookie('rememberme', $email.
      '+'.$pass, time() + 3600 * 24 * 31, "/");
  }
  $result = mysqli_query($link, "SELECT * FROM reg_user WHERE email = '$email' AND pass = '$pass'");
  If(mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_array($result);
    session_start();
    $_SESSION['auth'] = 'yes_auth';
    $_SESSION['auth_pass'] = $row["pass"];
    $_SESSION['auth_email'] = $row["email"];
    $_SESSION['auth_name'] = $row["name"];
    echo 'yes_auth';
  } else {
    echo 'no_auth';
  }
}
Answer 1

Простите, что пишу советы в ответ, но мне нужно форматирование и много строк :D

  1. Сначала отключите AJAX и настройте форму так, чтобы она слала POST-запрос туда, куда нужно
  2. Затем в отредактируйте скрипт авторизации:
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      include('db_connect.php');
      include('../functions/functions.php');
      //Это называется дебаггинг - когда вы выводите всё, что вас интересует, смотрите и анализируете :D. var_dump - очень хорошая для этого функция.
      var_dump($_POST); echo '
' $email = clear_string($_POST["email"]); //Соль лучше добавлять ДО хеширования, ибо иначе, если кто-то получит доступ к БД - он сразу увидит, что пароль хранится в виде Соль1_хешПароля_Соль2. $pass = md5(clear_string($_POST["pass"])); $pass = strrev($pass); $pass = strtolower("9nm2rv8q".$pass. "2yo6z"); //Имейл и пароль (даже хеш) НЕЛЬЗЯ хранить в печеньках, ибо их стянуть можно без особых проблем. В куки пишут какой-нибудь хеш-id. //Иными словами, у вас в таблице пользователей (или в отдельной таблице) должно быть поле, например "session_hash", в который вы при первой авторизации на устройстве с галкой "запомнить меня" записываете какой-нибудь хеш (например, md5($_SESSION['user_id'].$_SERVER['REMOTE_ADDR']) //и потом настраиваете скрипт на авторизацию либо по логину и паролю, либо по хешу сессии + ещё что-нибудь. Например, связка id+session_hash if ($_POST["rememberme"] == "yes") { setcookie('rememberme', $email. '+'.$pass, time() + 3600 * 24 * 31, "/"); } //Здесь снова дебаг var_dump($email, $pass); echo '
'; //Дальше. Предположим, у вас 1 юзер, и его id - 1. //Я не умею в mysqli, поэтому пишу через PDO, вы просто переведёте $user = $db->query('SELECT `email`, `pass` FROM `reg_user` WHERE `user_id`=1')->fetch(); echo '$email == `email`: '; var_dump($email==$user['email']); echo '
'; echo '$pass == `pass`: '; var_dump($pass==$user['pass']); $result = mysqli_query($link, "SELECT * FROM reg_user WHERE email = '$email' AND pass = '$pass'"); If(mysqli_num_rows($result) > 0) { $row = mysqli_fetch_array($result); //@ - подавление ошибок. А т.к. у нас уже есть вывод до вызова session_start - ошибки точно будут. Поэтому мы их заглушим @session_start(); $_SESSION['auth'] = 'yes_auth'; $_SESSION['auth_pass'] = $row["pass"]; $_SESSION['auth_email'] = $row["email"]; $_SESSION['auth_name'] = $row["name"]; echo 'yes_auth'; } else { echo 'no_auth'; } }

Таким образом вы увидите на экране:

  1. Всё, что пришло постом
  2. Имейл и пароль после преобразований
  3. Равен ли имейл имейлу из БД
  4. Равер ли хеш пароля хешу из БД

Читайте, анализируйте, делайте выводы, пишите.

Answer 2

Перед session_start(); напишите var_dump($row); die(); и покадите тут результат) Так же я вам рекомендую не хранить в куке связку email + пароль)

Пустой результат запроса) Смотрите условия, проблема где то там)

READ ALSO
можно ли с помощью imagine yii2 получить изображение

можно ли с помощью imagine yii2 получить изображение

можно ли с помощью imagine yii2 получить изображение, а не сохранять егоТО есть сразу через ресайз получить обрезание изображение

172
запуск долгого php скрипта в shell по кнопке на сайте

запуск долгого php скрипта в shell по кнопке на сайте

Есть php скрипт, который запускается автоматом через cron как в запуск php скрипта по кнопке но данный там совет запускать через exec('/usr/bin/php /var/www/site/updatephp');...

160
Дублирование элементов Wordpress(Woocommerce)

Дублирование элементов Wordpress(Woocommerce)

Есть сайт WP на Woocommercehttps://englishinna

164
Вызов константы из COM-библиотеки в PHP

Вызов константы из COM-библиотеки в PHP

У меня есть COM-библиотека(hybriddll) написанная на C++

173