Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал Интеграция FMXLauncher с разными CMS

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Starr, 15 авг 2015.

  1. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Пробуй.
     
  2. Хостинг MineCraft
    <
  3. boatswain

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

    Баллы:
    61
    Ошибка при парсинге ответа... Файлы пусты.
     
  4. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Вывел хеширование в скрипт, попробуй еще.
     
  5. boatswain

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

    Баллы:
    61
    Все работает, огромное спасибо! :cry::good:
     
  6. spaun1981

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

    Баллы:
    63
    Имя в Minecraft:
    spaun1981
    WebMCR: куда этот код??
     
  7. 11dimonchik22

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

    Баллы:
    76
    Sql_utils.php
     
  8. spaun1981

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

    Баллы:
    63
    Имя в Minecraft:
    spaun1981
    Я уже разобрался , но спасибо!
     
  9. MILLAN

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

    Баллы:
    61
    Имя в Minecraft:
    MILLAN
    напиши в лс мне нужна помощь
     
  10. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Ну так сам напиши, коль тебе нужна. Я откуда то знаю, что тебе надо?
     
  11. IIIeX

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

    Баллы:
    61
    Имя в Minecraft:
    IIIeX
    День добрый!, можете помочь с запросом для Authme?
    Лаунчер выдает ошибку "error at SQL query"
    В коде подправил "login" на 'username' - лаунчер начал писать "User not found"
    PHP:
    <?php
        
    include_once('settings.php');
        
    define('USER_EXISTS'    0);
        
    define('USER_NOT_EXISTS'1);
        
    define('SQL_ERROR'      2);
        function 
    IsPlayerInBase($db_handle$login$password) {
            global 
    $players_table_name;
            
    $sth $db_handle->prepare("SELECT `password` FROM `{$players_table_name}` WHERE `username`=:login");
            if (
    $sth->execute(array('username' => $login))) {
                
    $gethash=$sth->fetch(PDO::FETCH_ASSOC);
                
    $hash $gethash['password'];
                
    $exp preg_split('/\\$/'$hash);
                
    $salt $exp[2];
                
    $rpass '$SHA$'.$salt.'$'.hash('sha256',hash('sha256',$password).$salt);
            } else {
                return 
    USER_NOT_EXISTS;
            }
            
    $user = array(
                
    'username'    => $login,
                
    'password' => $rpass
            
    );
            
    $sql $db_handle->prepare("SELECT COUNT(1) FROM `{$players_table_name}` WHERE `username`=:login AND BINARY `password`=:password");
            if (
    $sql->execute($user)) {
                if (
    $sql->fetchColumn()) {
                    return 
    USER_EXISTS;
                } else {
                    return 
    USER_NOT_EXISTS;
                }
            } else {
                return 
    SQL_ERROR;
            }
        }
    ?>
    Колонки в таблице: id - username - password - ip - lastlogin
     
  12. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Потому что не надо было ничего трогать)
    А по сути, я забыл кое-что заменить.
    Вот рабочий пример:
    PHP:
    <?php
        
    include_once('settings.php');

        
    define('USER_EXISTS'    0);
        
    define('USER_NOT_EXISTS'1);
        
    define('SQL_ERROR'      2);

        function 
    IsPlayerInBase($db_handle$login$password) {

            global 
    $players_table_name;

            
    $sth $db_handle->prepare("SELECT `password` FROM `{$players_table_name}` WHERE `username`=:login");

            if (
    $sth->execute(array('login' => $login))) {
                
    $gethash=$sth->fetch(PDO::FETCH_ASSOC);
                
    $hash $gethash['password'];

                
    $exp preg_split('/\\$/'$hash);
                
    $salt $exp[2];

                
    $rpass '$SHA$'.$salt.'$'.hash('sha256',hash('sha256',$password).$salt);
            } else {
                return 
    USER_NOT_EXISTS;
            }

            
    $user = array(
                
    'login'    => $login,
                
    'password' => $rpass
            
    );

            
    $sql $db_handle->prepare("SELECT COUNT(1) FROM `{$players_table_name}` WHERE `username`=:login AND BINARY `password`=:password");

            if (
    $sql->execute($user)) {
                if (
    $sql->fetchColumn()) {
                    return 
    USER_EXISTS;
                } else {
                    return 
    USER_NOT_EXISTS;
                }

            } else {
                return 
    SQL_ERROR;
            }

        }
    ?>
     
  13. IIIeX

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

    Баллы:
    61
    Имя в Minecraft:
    IIIeX
    Благодарю, работает!
     
  14. VaNnOrus

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

    Баллы:
    123
    Может я в чем-то не прав, но по-моему лучше юзать отдельные классы (можно и не отдельные, кому как нравится), которые будут авторизовываться методами целевых ЦМС, чем переписывать куски кода авторизации.

    Объясню почему лучше делать так на примере XenForo:
    У xf есть множество классов хеширования пароля и можно даже свой сделать, при большом желании. Все хранится в базе. Может быть хоть у каждого юзера свой метод хеширования.
    Если поднять инстанс приложения в отдельном скрипте (в скрипте авторизации для лаунчера, например) вся авторизация в XenForo укладывается в 10 строчек кода, не теряя абсолютно никаких "фич" XenForo относительно хеширования и прочих дел. Пример авторизации средствами поднятия инстанса xf где-то тут уже года 2 как лежал.

    На мой взгляд это является правильной интеграцией, а не копирование кода авторизации и прямые запросы к таблицам ЦМС. С другой стороны, если ЦМС не предусматривает вообще ничего, кроме md5, то почему бы и не напрямую запрашивать...
     
  15. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Использование классов можно увидеть в вебчасти @Vladlen_198. Для FMXL3 будет общий класс, содержащий несколько функций авторизации под каждую СMS.
     
    Последнее редактирование: 10 ноя 2015
  16. VaNnOrus

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

    Баллы:
    123
    Не важно один класс или несколько, я говорю о том, что функции авторизации в этих скриптах не должны копировать код методов авторизации у разных ЦМС, а должны запускать в себе инстансы ЦМС и работать их методами. Конкретно для xf это наиболее целесообразно.
     
  17. Extasy

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

    Баллы:
    78
    Имя в Minecraft:
    Extasy
    Как связать с webMCRex?
     
  18. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Там разве не тот же хеш, какой и у WebMCR?
     
  19. Extasy

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

    Баллы:
    78
    Имя в Minecraft:
    Extasy
    На счет этого незнаю.
     
  20. Автор темы
    Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    Тогда выбирай WebMCR.
     
  21. Rlemish

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

    Баллы:
    61
    Имя в Minecraft:
    rlemish
    XenForo актуально до 1.4, в 1.5 хэш пароли в отдельной таблице...
     

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