Gualdimar / MinecraftSkinSystem

17 stars 72 forks source link

Не авторизуется в автономной системе #2

Closed RealVaVa closed 12 years ago

RealVaVa commented 12 years ago

Взял за основу system(byxar's edition) (автономную систему), развернул. Через веб зарегистрировал пользователей успешно. Скомпилировал лаунчер (экспериментировал на всех трёх - стандартном, с возможностью изменения используемой памяти и портабельный). При подключении в лаунчере вываливается ошибка кракозябрами, несмотря на то, что использовал исходную кодировку UTF-8 без ВОМ, вручную перекодировал в UTF-8 все php-ники, пробовал даже ANSI (так, для ржаки) - один хрен ошибка выходит кракозябрами, и конкретизировать что и откуда не могу. Скрин тут (ссылка прямая) - http://vava.nnover.ru/data/uf2/3379331/26/79/6267915_mc_error.png Куда копать?

RealVaVa commented 12 years ago

Странно. Сейчас авторизация заработала, вроде как (это я понял по ошибке "бэд логин" в случае неверно введённого пароля), но вываливается всё та же ошибка. Ковыряю на предмет проверки версии лаунчера. Таблица "data", указанная в connect.php существует и заполнена.

на всякий слчай auth.php <?php define('INCLUDE_CHECK',true); require_once '../functions.php'; include ("../connect.php"); $login=$_POST['user']; $postPass=$_POST['password']; $ver=$_POST['version'];

    if(getGameInfo('launcher') == $ver){

        $result = mysql_query("SELECT $db_columnPass FROM $db_table WHERE $db_columnUser='$login'") or die ("Запрос к базе завершился ошибкой."); //извлекаем из базы все данные о пользователе с введенным логином
            $myrow = mysql_fetch_array($result);

        $realPass = $myrow[$db_columnPass];

            if (checkPass($realPass,$postPass)) 
            {
                $sessid = generateSessionId();
                $gamebuild=getGameInfo('build');

                mysql_query("UPDATE $db_table SET $db_columnSesId='$sessid' WHERE $db_columnUser = '$login'") or die ("Запрос к базе завершился ошибкой.");

                $dlticket = md5($login);
                echo $gamebuild.':'.$dlticket.':'.$login.':'.$sessid.':';
            }
        else {
            echo "Bad login";
            }
    }
    else{
        echo 'Old version';
        }

?>

и connect.php

<?php if(!defined('INCLUDE_CHECK')) die('У вас нет прав на выполнение данного файла!');

// Конфигурация подключения к базе данных $db_host = 'localhost'; // Ip-адрес базы данных $db_port = 3306; // Порт базы данных $db_user = 'newmc'; // Пользователь базы данных $db_pass = '*****'; // Пароль базы данных

// Конфигурация базы данных для плагинов AuthMe, xAuth, CAuth / $db_database - имя базы данных, значение по умолчанию для плагинов: AuthMe = authme, xAuth = отсутствует (указывается вручную), CAuth = cauth / $db_database = 'newmc';

/ $db_table - таблица базы данных, значение по умолчанию для плагинов: AuthMe = authme, xAuth = accounts, CAuth = users / $db_table = 'accounts';

/ $db_columnId - уникальный идентификатор, значение по умолчанию для плагинов: AuthMe = id, xAuth = id, CAuth = id / $db_columnId = 'id';

/ $db_columnUser - колонка логина, значение по умолчанию для плагинов: AuthMe = username, xAuth = playername, CAuth = login / $db_columnUser = 'playername';

/ $db_columnPass - колонка пароля, значение по умолчанию для плагинов: AuthMe = password, xAuth = password, CAuth = password / $db_columnPass = 'password';

/ $db_columnEmail - колонка email'a / $db_columnEmail = 'email';

/ $db_columnLastLogl - колонка даты последнего входа / $db_columnLastLog = 'lastlogindate';

/ $db_columnRegDate - колонка даты регистрации / $db_columnRegDate = 'registerdate';

/ $db_columnSesId - колонка id сессии / $db_columnSesId = 'session';

/ $db_columnServer - колонка id сервера / $db_columnServer = 'server';

/ Настройки таблицы для защиты от подбора паролей / $db_ErrorLogtable = 'errorlogin'; $db_Ipcolumn = 'ip'; $db_Datecolumn = 'date'; $db_Numcolumn = 'num';

/ $db_GameDatatable - имя базы данных с информацией о версиях / $db_GameDatatable = 'data';

/ НЕ МЕНЯТЬ / $db_Propertycolumn = 'property'; $db_Valuecolumn = 'value';

$link = @mysql_connect($db_host.':'.$db_port,$db_user,$db_pass) or die('Невозможно установить соединение с базой данных!');

mysql_select_db($db_database,$link); mysql_query("SET names UTF8"); ?>

Gualdimar commented 12 years ago

скорее всего ты не правильно настроил connect.php или у тебя не правильная база(нет нужных колонок/таблиц) сообщение в лаунчере может быть только одним из этих: "Запрос к базе завершился ошибкой." "Невозможно установить соединение с базой данных!"

RealVaVa commented 12 years ago

Проблема в том, что веба то работает нормально, обращаясь к базе с помощью того же connect.php . Я создаю пустую базу и импортячу вот это щасте https://github.com/byxar/MinecraftSkinSystem/tree/master/skin_system(auth%20system%20included)/system(byxar's%20edition)/sql (add_colums.sql завивать не стал, ибо дублирует поля, хотя щас попробовал ради эксперимента - не поомогло)

Меня смущает вот эта запись в коннект.пхп

/ $db_GameDatatable - имя базы данных с информацией о версиях / $db_GameDatatable = 'data';

База данных? Отдельная база данных или таки таблица? Но и таблицы такой нет у меня. Я брал из system_forums(based on byxar's edition) data.sql и из auth_system_scripts, импортировал в ту же базу, но и это не помогло.

И ещё интересный момент - если бы он некорректно обращался к базе данных, то и бэд логин бы вряд ли выдавал. Не так?

Gualdimar commented 12 years ago

там опечатка, имя таблицы

RealVaVa commented 12 years ago

а зачем ваще add_colums в самостоятельной системе? откуда брать эту таблицу (это я про дату)? Что в ней должно быть? Как это различить?

RealVaVa commented 12 years ago

Косяк, действительно, в connect.php

<?php if(!defined('INCLUDE_CHECK')) die('У вас нет прав на выполнение данного файла!');

// Метод хеширования пароля. Используется md5. !!!!Вот этого не было в оригинальном пхп-шнике /* 'hash_md5' - md5 хеширование

*/ $crypt = 'hash_md5';

// Конфигурация подключения к базе данных $db_host = 'localhost'; // Ip-адрес базы данных $db_port = 3306; // Порт базы данных $db_user = 'user'; // Пользователь базы данных $db_pass = 'password'; // Пароль базы данных

/ $db_database - имя базы данных, значение по умолчанию: / $db_database = 'database';

/ $db_table - таблица базы данных. В самостоятельной системе исползуется accounts / $db_table = 'accounts';

/ $db_columnUser - колонка логина / $db_columnUser = 'playername';

/ $db_columnPass - колонка пароля / $db_columnPass = 'password';

/ $db_columnSesId - колонка id сессии. !!!Этого тоже не было. / $db_columnSesId = 'sesId';

/ $db_columnServer - колонка id сервера. !!!Как и этого тоже / $db_columnServer = 'serverId';

/ $db_GameDatatable - имя !таблицы! с информацией о версиях. Таблицы в загрузке, кстати, нет, нужно добавит строки непосредственно в accounts.sql / $db_GameDatatable = 'data';

/ НЕ МЕНЯТЬ / $db_Propertycolumn = 'property'; $db_Valuecolumn = 'value';

$link = @mysql_connect($db_host.':'.$db_port,$db_user,$db_pass) or die('Невозможно установить соединение с базой данных!');

mysql_select_db($db_database,$link); mysql_query("SET names UTF8"); ?>

А ещё в том, что нет таблицы data

Gualdimar commented 12 years ago

файл add_columns.sql добавляет колонки сессии и ID сервера в уже существующую базу(нужно для системы авторизации). измените в нем table_name на название таблицы с аккаунтами, sesId на название колонки с сессией и serverId на название колонки с ID сервера.

data.sql можно взять отсюда https://github.com/byxar/MinecraftSkinSystem/blob/master/skin_system(auth%20system%20included)/system_forums(based%20on%20byxar's%20edition)/sql/data.sql

RealVaVa commented 12 years ago

Так речь то идёт об самостоятельной (автономной) системе, которая вами разработана. А из add_colums.sql лучше просто колонки сразу в accounts.sql добавить. Но прилагаемый к автономной системе connect.php 100% нерабочий. Замените, пожалуйста, чтобы народ не путался, как я.

RealVaVa commented 12 years ago

Самое забавное, что возникла очень интересная ошибка: Falied to Login. OK Это уже поменяный minecraft.jar говорит, и я не могу найти откуда он такую ошибку выводит.

RealVaVa commented 12 years ago

Экспирементальным путём выяснил, что ошибка связана с chechserver.php (проверял и на оригинальном и на бакките). Не принимает сервер коннекты от пользаков. Видимо неверный запрос посылается. Содержание файлика <?php define('INCLUDE_CHECK',true); include ("connect.php");

$user = mysql_real_escape_string($_GET['user']); $serverid = mysql_real_escape_string($_GET['serverId']);

$result = mysql_query("Select $db_columnUser From $db_table Where $db_columnUser='$user' And $db_columnServer='$serverid'") or die ("Запрос к базе завершился ошибкой.");

if(mysql_num_rows($result) == 1){ echo "YES"; } else{ echo "NO"; }

?>