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

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

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

  1. boatswain

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

    Баллы:
    61
    Нет, все та же "members_pass_salt".
     
  2. 11dimonchik22

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

    Баллы:
    76
    @boatswain вот тут метод хэширования ищи /admin/sources/base/core.php
     
  3. boatswain

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

    Баллы:
    61
    Там сейчас вообще другая структура, и данного файла нет.
    Не слишком силен в php, но думаю эта часть отвечает за хэширование.
    PHP:
        /**
         * Encrypt a plaintext password
         *
         * @param    string    $password    Password to encrypt
         * @return    string    Encrypted password
         * @todo    [Future] When we increase minimum PHP version, adjust blowfish to $2y$
         */
        
    public function encryptedPassword$password )
        {
            
    /* New password style introduced in IPS4 using Blowfish */
            
    if ( mb_strlen$this->members_pass_salt ) === 22 )
            {
                return 
    crypt$password'$2a$13$' $this->members_pass_salt );
            }
            
    /* Old encryption style using md5 */
            
    else
            {
                return 
    md5md5$this->members_pass_salt ) . md5( \IPS\Request::legacyEscape$password ) ) );
            }
        }
     
  4. Автор темы
    Starr

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

    Баллы:
    98
    Перепишу щас скрипт.
    @boatswain, проверяй.
     
  5. boatswain

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

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

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

    Баллы:
    98
    А где у тебя лежит sql_utils и этот файл с хэшированием?
     
  7. boatswain

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

    Баллы:
    61
    /public_html/auth(fmx)/sql_utils.php
    /public_html/system/member/member.php
     
  8. Автор темы
    Starr

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

    Баллы:
    98
    Пробуй.
     
  9. boatswain

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

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

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

    Баллы:
    98
    Вывел хеширование в скрипт, попробуй еще.
     
  11. boatswain

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    98
    Ну так сам напиши, коль тебе нужна. Я откуда то знаю, что тебе надо?
     
  17. 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
     
  18. Автор темы
    Starr

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

    Баллы:
    98
    Потому что не надо было ничего трогать)
    А по сути, я забыл кое-что заменить.
    Вот рабочий пример:
    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;
            }

        }
    ?>
     
  19. IIIeX

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

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

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

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

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

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

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