Загрузка...

Ошибка в работе авторизации

Тема в разделе Backend создана пользователем Dimi4da 16 мар 2023. 253 просмотра

  1. Dimi4da
    Dimi4da Автор темы 16 мар 2023 1 6 июл 2018
    Существует бд, в которую при регистрации вводятся данные: логин и пароль, но при авторизации происходит ошибка: Неверный логин или пароль

    В чём моя ошибка и как её можно исправить? И почему может не записываться в бд почта, если она вводиться при регистрации?

    бд
    [IMG]

    Файл авторизации:
    PHP
    <?php
    session_start();
    require_once "db_connection.php";

    if(isset($_POST['submit'])){
    $username = $_POST['username'];
    $password = $_POST['password'];

    // проверка логина и пароля
    $sql = "SELECT * FROM users WHERE username='$username'";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($result);

    if($row && password_verify($password, $row['password'])){
    $_SESSION['id'] = $row['id'];
    $_SESSION['username'] = $row['username'];
    $_SESSION['access_level'] = $row['access_level'];

    // перенаправление на нужную страницу в зависимости от категории доступа
    if($_SESSION['access_level'] == "admin"){
    header("Location: admin_panel.php");
    }
    else {
    header("Location: profile.php");
    }
    }
    else {
    echo "Неверный логин или пароль";
    }
    }
    ?>
    Файл коннекта с бд:
    PHP
    <?php
    // Данные для подключения к базе данных
    define('SERVER','localhost');
    define('DB_NAME','bump');

    // Создание соединения с базой данных
    $conn= mysqli_connect(SERVER,'root','',DB_NAME);

    // Проверка соединения
    if (!$conn) {
    die("Ошибка соединения: " . mysqli_connect_error());
    }


    // Получение данных об уровне доступа
    function get_user_access_level($username) {
    global $conn;
    $query = "SELECT access_level FROM users WHERE username = '$username'";
    $result = mysqli_query($conn, $query);
    if ($result && mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    return $row['access_level'];
    }
    return false;
    }

    // Получения данных по почте
    function get_user_email($username) {
    global $conn;
    $query = "SELECT email FROM users WHERE username = '$username'";
    $result = mysqli_query($conn, $query);
    if ($result && mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    return $row['email'];
    }
    return false;
    }
    ?>
     
  2. BaraGunda
    BaraGunda 16 мар 2023 17 14 май 2019
    у тебя в базе лежат plaintext пароли, а не их хеши

    [IMG]

    поэтому password_verify выдает false
    --- Сообщение объединено с предыдущим 16 мар 2023
    кода самой регистрации нет
     
  3. NightAngel
    NightAngel 18 мар 2023 7 13 дек 2021
    Здесь есть проверка хешированного пароля

    Код
    if($row && password_verify($password, $row['password']))
    Но для этого пароль должен быть захеширован в базе данных. Для этого перед сохранением его нужно вызвать функцию хеширования и сохранить в бд уже хеш.
    А в данном случае ты сравниваешь введенный пароль с предполагаемым хешем(который таковым не является)
     
    18 мар 2023 Изменено
  4. panzerfaust
    panzerfaust 21 мар 2023 это не я 231 9 фев 2018
    PHP
    <?php

    session_start();
    require_once 'connect.php';

    $login = $_POST['login'];
    $password = $_POST['password'];

    $error_fields = [];

    if ($login === '') {
    $error_fields[] = 'login';
    }

    if ($password === '') {
    $error_fields[] = 'password';
    }

    if (!empty($error_fields)) {
    $response = [
    "status" => false,
    "type" => 1,
    "message" => "Error Fields",
    "fields" => $error_fields
    ];

    echo json_encode($response);

    die();
    }


    $check_user = mysqli_query($connect, "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'");

    if (mysqli_num_rows($check_user) > 0)
    {

    $user = mysqli_fetch_assoc($check_user);

    $_SESSION['user'] = [
    "id" => $user['id'],
    "login" => $user['login'],

    ];

    $response = [
    "status" => true,
    "message" => 'Data incorrect'
    ];

    echo json_encode($response);

    }
    else
    {

    $response = [
    "status" => false,
    "message" => 'Data incorrect'
    ];

    echo json_encode($response);
    }

    ?>
     
Загрузка...
Top