1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал [урок] система авторизации клиента

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем byxar, 6 ноя 2011.

  1. Alex_P9712

    Alex_P9712 Активный участник Пользователь

    Баллы:
    63
    вот вопросик я сделал лаунчер и все скрипты правильно но когда я захожу на свой\друга серв - ошибка конец строки (помоему endOFstream)
     
  2. Combain

    Combain Активный участник

    Баллы:
    63
    У меня ошибка была с MySQL, лагала. Но через сутки все стало в норме.
     
  3. Combain

    Combain Активный участник

    Баллы:
    63
    Правда бывает падает news.php.
     
  4. nf1975

    nf1975 Старожил Пользователь

    Баллы:
    103
    Появилась не большая проблема.
    У меня IPB движок и вместо логина(т.к. будут проблемы с русс буквами и символами) у меня дополнительное поле в той же базе, но таблица pfields_content, получается нужно преобразовать сложные запросы, ник находится в ячейке field_4, вот, что получилось:

    joinserver.php
    Код:
    <?php
    define('INCLUDE_CHECK',true);
    include ("connect.php");
     
    $sessionid = mysql_real_escape_string($_GET['sessionId']);
    $user = mysql_real_escape_string($_GET['user']);
    $serverid = mysql_real_escape_string($_GET['serverId']);
     
    $result = mysql_query("Select pfields_content.field_4, members.session, members.server FROM pfields_content, members Where members.session='$sessionid' And pfields_content.field_4='$user' And members.server='$serverid'") or die ("Запрос к базе завершился ошибкой.");
     
    if(mysql_num_rows($result) == 1){
        echo "OK";
    } else {
     
    $result = mysql_query("Update members, pfields_content FROM pfields_content, members SET members.server='$serverid' Where members.session='$sessionid' And pfields_content.field_4='$user'") or die ("Запрос к базе завершился ощибкой.");
     
        if(mysql_affected_rows() == 1){
            echo "OK";
        } else {
            echo "Bad login";
        }
    }
    ?>
    auth.php
    Код:
    <?php
    define('INCLUDE_CHECK',true);
    require_once 'functions.php';
    include ("connect.php");
    $login=$_POST['user'];
    $password=$_POST['password'];
    $ver=$_POST['version'];
     
            if(getGameInfo('launcher') == $ver){
     
                $result = mysql_query("SELECT members.members_pass_hash, pfields_content.field_4 FROM pfields_content, members WHERE pfields_content.field_4='$login'") or die ("Запрос к базе завершился ошибкой."); //извлекаем из базы все данные о пользователе с введенным логином
                    $myrow = mysql_fetch_array($result);
     
                $realPass = $myrow[$db_columnPass];
     
                    if (checkPass($realPass,$password,$login))
                    {
                        $sessid = generateSessionId();
                        $gamebuild=getGameInfo('build');
     
                        mysql_query("UPDATE members, pfields_content FROM pfields_content, members SET members.session='$sessid' WHERE pfields_content.field_4 = '$login'") or die ("Запрос к базе завершился ошибкой.");
     
                        $dlticket = md5($login);
                        echo $gamebuild.':'.$dlticket.':'.$login.':'.$sessid.':';
                    }
                else {
                    echo "Bad login";
                    }
            }
            else{
                echo 'Old version';
                }
    ?>
    checkserver.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 pfields_content.field_4, members.server FROM pfields_content, members Where pfields_content.field_4='$user' And members.server='$serverid'") or die ("Запрос к базе завершился ошибкой.");
     
    if(mysql_num_rows($result) == 1){
        echo "YES";
    } else{
        echo "NO";
    }
     
    ?>
    functions.php
    Код:
     <?php
    if(!defined('INCLUDE_CHECK')) die('У вас нет прав на выполнение данного файла!');
     
    function generateSessionId(){
        // generate rand num
        srand(time());
        $randNum = rand(1000000000, 2147483647).rand(1000000000, 2147483647).rand(0,9);
        return $randNum;
    }
     
    function getGameInfo($type){
        include ("connect.php");
        switch($type){
        case 'build':
            $query = mysql_query("SELECT * FROM $db_GameDatatable WHERE $db_Propertycolumn = 'latest-game-build'") or die ("Запрос к базе завершился ошибкой.");   
                $resource = mysql_fetch_array($query);
                return $resource[$db_Valuecolumn];
        break;
     
        case 'launcher':
            $query = mysql_query("SELECT * FROM $db_GameDatatable WHERE $db_Propertycolumn = 'launcher-version'") or die ("Запрос к базе завершился ошибкой.");
                $resource = mysql_fetch_array($query);
                return $resource[$db_Valuecolumn];
        break;
     
        }
    }
     
    function checkPass($realPass,$password,$login){
                if (strlen($realPass) == 32)
                {
                    $cp = md5($password);
                    if ($realPass==$cp) {
                        return true;
                    }
                    else {
                        include ("connect.php");
                        $query = mysql_query("SELECT * FROM pfields_content WHERE field_4 = '$login'") or die ("Запрос к базе завершился ошибкой.");
                            $resource = mysql_fetch_array($query);
                        $salt = $resource[$db_columnPassSalt];
                        $cp = md5(md5($salt).md5($password));
                    }
                }
                else {
                    if(strpos($realPass,'$SHA$') !== false)
                    {
                        $ar = preg_split("/\\$/",$realPass);
                        $salt = $ar[2];
                        $cp = '$SHA$'.$salt.'$'.hash('sha256',hash('sha256',$password).$salt);
                    }
                    else
                    {
                        $saltPos = (strlen($password) >= strlen($realPass) ? strlen($realPass) : strlen($password));
                        $salt = substr($realPass, $saltPos, 12);
                        $hash = hash('whirlpool', $salt . $password);
                        $cp = substr($hash, 0, $saltPos) . $salt . substr($hash, $saltPos);
                    }
                }
               
                if ($realPass==$cp) {
                    return true;
                }
                else {
                    return false;
                }
    }
    ?>
    Но после этого просит обновление, качает minecraft.jar и обрывается 91-92%, до редактирования все нормально, подскажите, где и какую я упустил деталь.
     
  5. Фёдор

    Фёдор Активный участник

    Баллы:
    78
    Имя в Minecraft:
    Filonich
    вообщем проблема такая, лаунчер я изменяю споткрафтовский, при попытке зайти на сервер пишет : BAD LOGIN, и в minecraft.jar, и в spoutcraft.jar я менял adl.class, вообщем, выручайте, а?
     
  6. FANtikoFF

    FANtikoFF Старожил Пользователь

    Баллы:
    103
    Skype:
    offantik
    Имя в Minecraft:
    FANtik

    мне бы узнать файлик под vanilla server1.2.5
    то способ с mcp44 не дал результатов!

    так как Декомпилитаця идет все счто надо поменял
    а когда Рекомпилирую то появляется пустая папка minecraft_server
     
  7. m3dvedi

    m3dvedi Активный участник

    Баллы:
    61
    Имя в Minecraft:
    m3dvedi
    Простите за глупый вопрос! Если я буду делать всё по инструкции то у меня получится.
    Сайт-Лаунчер-Клиент-Сервер. Вопрос: У меня будет присутствовать проверка md5? То есть когда игрок захочет изменить клиент он перескачается? (защита от читов)
    Если да то тык-ните место в статье где рассказывается про md5 и установку.
    Заранее благодарю.
     
  8. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    Нет, не будет.
    Проверка делается в ЛАУНЧЕРЕ, а не в системе авторизации.
     
  9. friter

    friter Активный участник

    Баллы:
    63
    Всем привет. Сделал все по инстуркции буксара с 1го поста. , но у меня при входе на сервер появляется ни что иное, как http://clip2net.com/s/2g1vn[​IMG]
    Покопавшись в скриптах нашел, что это ОК идет от joinserver.php
    Как это исправить? Скажите какую инфу о своих настройках вам предоставить.
     
  10. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    в ANSI перекодируй или как там ее
     
  11. friter

    friter Активный участник

    Баллы:
    63
    PHP:
    <?php
    define
    ('INCLUDE_CHECK',true);
    include (
    "connect.php");
     
    $sessionid mysql_real_escape_string($_GET['sessionId']);
    $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_columnSesId='$sessionid' And $db_columnUser='$user' And $db_columnServer='$serverid'") or die ("Запрос к базе завершился ошибкой.");
     
    if(
    mysql_num_rows($result) == 1){
    echo 
    "OK";
    } else {
     
    $result mysql_query("Update $db_table SET $db_columnServer='$serverid' Where $db_columnSesId='$sessionid' And $db_columnUser='$user'") or die ("Запрос к базе завершился ошибкой.");
     
    if(
    mysql_affected_rows() == 1){
    echo 
    "OK";
    } else {
    echo 
    "Bad login";
    }
    }
    ?>
    вот входа на серв не происходит - игра застывает на этом участке
    if(mysql_affected_rows() == 1){
    echo "OK";
    } else {
    echo "Bad login";
    }
     
  12. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    1. Открыть joinserver.php в notepad++
    2. выбрать Кодировки->Преобразовать в ANSI
    3. Сохранить файл joinserver.php
    4. Залить его обратно на хост.
    5. Радоваться ^_^
     
  13. friter

    friter Активный участник

    Баллы:
    63
    сделал, но все так же проблема осталась. См предыдущий пост
     
  14. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    Пробуй тогда другую кодировку.
    Проблема в этом
     
  15. friter

    friter Активный участник

    Баллы:
    63
    Пожалуйста, можете скинуть скриптик с рабочей кодировкой, перепробовал все кодировки, которые предлагает NP++.
    даже сделал //echo "OK";, взял в комент, но при этом появляется при входе только http://clip2net.com/s/2g1KO
     
  16. Konstantin773

    Konstantin773 Старожил Пользователь

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Ошибка при заходе на сервер: Не могу войти <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">, что за ошибка и как исправить? Ошибка появляется при online-mode=true, при false заходит отлично и работает правильно, joinserver и checkserver работают правильно (проверялось). Мое мнение: ошибка на стороне сервера Проблему решил: в ?user= надо было использовать знак вопроса с английской раскладки, а не с русской
     
  17. friter

    friter Активный участник

    Баллы:
    63
    Проблема решилась, спасибо, в кодировке было дело
     
  18. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    а разве есть разница?
     
  19. Konstantin773

    Konstantin773 Старожил Пользователь

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Не знаю есть или нет, но факт остается фактом, просто до, если заходишь с лаунчера или любого другого клиента, писало одну и ту же ошибку, и я понял, что дело в checkserver или в ссылке на него, изменил вопрос, и начало пропускать.
     
    NoNaMeHaCkEr2002 и friter нравится это.
  20. friter

    friter Активный участник

    Баллы:
    63
    Все беды в кодировках:mad:
     

Поделиться этой страницей