Загрузка...

Authorization error

Thread in Backend created by Dimi4da Mar 16, 2023. 254 views

  1. Dimi4da
    Dimi4da Topic starter Mar 16, 2023 1 Jul 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 Mar 16, 2023 17 May 14, 2019
    у тебя в базе лежат plaintext пароли, а не их хеши

    [IMG]

    поэтому password_verify выдает false
    The post was merged to previous Mar 16, 2023
    кода самой регистрации нет
     
  3. NightAngel
    NightAngel Mar 18, 2023 7 Dec 13, 2021
    Здесь есть проверка хешированного пароля

    Code
    if($row && password_verify($password, $row['password']))
    Но для этого пароль должен быть захеширован в базе данных. Для этого перед сохранением его нужно вызвать функцию хеширования и сохранить в бд уже хеш.
    А в данном случае ты сравниваешь введенный пароль с предполагаемым хешем(который таковым не является)
     
  4. panzerfaust
    panzerfaust Mar 21, 2023 это не я 231 Feb 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);
    }

    ?>
     
Loading...
Top