Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Поторопился с выводом, скины некорректно работают, при входе в любом случае стандартный скин. @Sirse, молю помоги. Именно само превью скина дефолтное, при этом скин скачивается, тот который нужен и на сайте лежит, тот который нужен, удаляет сикн тоже из нужного места, а вот превью дефолтное при входе.

Починил, путем замены в auth.php $username на $userinfo в 53 строчке
Прошу протестить авторизацию под xenforo :)
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 `salt` FROM `{$players_table_name}` WHERE `login`=:login");
      
        $sth->execute(array(
            'login' => $login,
        ));
      
        $getsalt=$sth->fetch(PDO::FETCH_ASSOC);
        $salt = $getsalt['salt'];
          
        $rpass = hash('sha256',hash('sha256',$password).$salt);
      
        $user = array(
            'login'    => $login,
            'password' => $rpass
        );
      
        $sql = $db_handle->prepare("SELECT COUNT(1) FROM `{$players_table_name}` WHERE `login`=:login AND BINARY `password`=:password");
      
        if ($sql->execute($user)) {
            if ($sql->fetchColumn()) {      
                return USER_EXISTS;      
            } else {
                return USER_NOT_EXISTS;
            }  
          
        } else {
            return SQL_ERROR;
        }
      
    }
?>
 
Последнее редактирование:
@Starr, а ведь в authme не login, а username
И еще мне кажется, что если делается еще один запрос, то его тоже надо проверять на успешность
PHP:
if (!sth->execute(array('login' => $login))) {
        return SQL_ERROR;
}

А вообще, раз уж мы уже получили зашифрованный пароль из бд, можно и не делать второй запрос, а сравнивать с полученным изначально.
 
@Starr, а ведь в authme не login, а username
И еще мне кажется, что если делается еще один запрос, то его тоже надо проверять на успешность
PHP:
if (!sth->execute(array('login' => $login))) {
        return SQL_ERROR;
}

А вообще, раз уж мы уже получили зашифрованный пароль из бд, можно и не делать второй запрос, а сравнивать с полученным изначально.
Спасибо, исправлю.
 
Последнее редактирование:
ЛИШНЯЯ СТРОКА.
Должно быть так
Код:
function IsPlayerInBase($db_handle, $login, $password) {
        global $players_table_name;
        $user = array(
            'login'    => $login,
            'password' => md5(md5($password))
        );
А у вас вот так
Код:
 function IsPlayerInBase($db_handle, $login, $password) {
        global $players_table_name;
        $user = array(
            'login'    => $login,
            'password' => md5(md5(($password))
        );
Лишняя строка юзабельности не нарушает, а за скобку спасибо, исправлено ;)
Прошу протестить авторизацию под xenforo :)
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 `salt` FROM `{$players_table_name}` WHERE `login`=:login");
    
        $sth->execute(array(
            'login' => $login,
        ));
    
        $getsalt=$sth->fetch(PDO::FETCH_ASSOC);
        $salt = $getsalt['salt'];
        
        $rpass = hash('sha256',hash('sha256',$password).$salt);
    
        $user = array(
            'login'    => $login,
            'password' => $rpass
        );
    
        $sql = $db_handle->prepare("SELECT COUNT(1) FROM `{$players_table_name}` WHERE `login`=:login AND BINARY `password`=:password");
    
        if ($sql->execute($user)) {
            if ($sql->fetchColumn()) {    
                return USER_EXISTS;    
            } else {
                return USER_NOT_EXISTS;
            }
        
        } else {
            return SQL_ERROR;
        }
    
    }
?>
Up, прошу проверить юзверей ксенфоры :)
 
нет, идет сразу за members_pass_hash, называется members_pass_salt
 
Спасибо, все работает.
При обновлении IPB до 4.0.* лаунчер выдает "User not found".
Изменилось название бд юзеров теперь вместо "members" - "core_members", в настройках вебчасти заменил. Все названия колонок остались прежними. Там новый метод хэширования пароля, или что?
 
Спасибо, все работает.
При обновлении IPB до 4.0.* лаунчер выдает "User not found".
Изменилось название бд юзеров теперь вместо "members" - "core_members", в настройках вебчасти заменил. Все названия колонок остались прежними. Там новый метод хэширования пароля, или что?
Ну по идее если правильно заменил то скорее всего да, хеширование наверное другое...
А таблица с солью не изменилась?
 

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

Назад
Верх