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

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

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

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

На мой взгляд это является правильной интеграцией, а не копирование кода авторизации и прямые запросы к таблицам ЦМС. С другой стороны, если ЦМС не предусматривает вообще ничего, кроме md5, то почему бы и не напрямую запрашивать...
Использование классов можно увидеть в вебчасти @Vladlen_198. Для FMXL3 будет общий класс, содержащий несколько функций авторизации под каждую СMS.
 
Последнее редактирование:
Использование классов можно увидеть в вебчасти @Vladlen_198. Для FMXL3 будет общий класс, содержащий несколько функций авторизации под каждую СMS.
Не важно один класс или несколько, я говорю о том, что функции авторизации в этих скриптах не должны копировать код методов авторизации у разных ЦМС, а должны запускать в себе инстансы ЦМС и работать их методами. Конкретно для xf это наиболее целесообразно.
 
Не важно один класс или несколько, я говорю о том, что функции авторизации в этих скриптах не должны копировать код методов авторизации у разных ЦМС, а должны запускать в себе инстансы ЦМС и работать их методами. Конкретно для xf это наиболее целесообразно.
Ну если занятся нечем и будешь выкуривать доки можно реализовать опять же. В моей реализации используются методы можно спокойно заменить.
 
Как связать с webMCRex?
 
XenForo актуально до 1.4, в 1.5 хэш пароли в отдельной таблице...
 
Кидай структуру таблиц XenForo, сделаю.
kw2s4hd7XLI.jpg


Hz4-CEHtCLs.jpg
 
Вот что удалось узнать, версия выше 1.2 использует новую схему (core12), а именно PHPass, есть возможность включить старый метод (core), но hash и salt записываются все равно в другой таблице да еще группой, вот примерная схема как это работает.
Если кто-то поможет допилить, заранее спасибо!
P.S. Есть методы хеширования паролей других движков, но они работают только на чтение, регистрация не доступна...
Исходники PHPass есть тут (/library/XenForo/PasswordHash.php) или ТУТ и ТУТ человек подробно описал как работает этот метод в этом движке.

bpCSe489zfk.jpg

Все очень просто оказалось, странно что нет описания по этой теме, вот простой рабочий пример сравнения пароля и хеша для Core12 (PHPass).

44vMC8TIKOQ.jpg
 
Последнее редактирование:
Вот что удалось узнать, версия выше 1.2 использует новую схему (core12), а именно PHPass, есть возможность включить старый метод (core), но hash и salt записываются все равно в другой таблице да еще группой, вот примерная схема как это работает.
Если кто-то поможет допилить, заранее спасибо!
P.S. Есть методы хеширования паролей других движков, но они работают только на чтение, регистрация не доступна...
Исходники PHPass есть тут (/library/XenForo/PasswordHash.php) или ТУТ и ТУТ человек подробно описал как работает этот метод в этом движке.

bpCSe489zfk.jpg

Все очень просто оказалось, странно что нет описания по этой теме, вот простой рабочий пример сравнения пароля и хеша для Core12 (PHPass).

44vMC8TIKOQ.jpg
Ой, код очень напоминает WordPress. в общем, скоро запилю.
 
Мой вариант реализации XenForo на CORE12 под FMXL3
P.S. имя таблицы с хеш-паролями можно вынести в settings.php для красоты.

PHP:
<?php
        # XenforoCore12:
            if (!isset($this->_dbConnector)) {return $this::STATUS_DB_OBJECT_NOT_PRESENT;}
         
            $request = "SELECT `user_id` FROM `{$playersTableName}` WHERE `username`=:login";
            $arguments = array ('login' => $login); 

            $preparedRequest = null;
            $status = $this->_dbConnector->ExecutePreparedRequest($request, $arguments, $preparedRequest);
            if (!isset($preparedRequest) || !$status) {
                return $this::STATUS_DB_ERROR;
            }     
         
            $user_id = $preparedRequest->fetchColumn();         
         
            $request1 = "SELECT `data` FROM `xf_user_authenticate` WHERE `user_id`=:user_id";
            $arguments1 = array ('user_id' => $user_id); 

         
            $preparedRequest1 = null;
            $status1 = $this->_dbConnector->ExecutePreparedRequest($request1, $arguments1, $preparedRequest1);
            if (!isset($preparedRequest1) || !$status1) {
                return $this::STATUS_DB_ERROR;
            }
 
            $xfHasher = new PasswordHash(8, TRUE);
            $datahash = $preparedRequest1->fetchColumn();
         
            preg_match("/(s:60:\")+(.*)+?(\")/", $datahash, $matches);
            $hashedPassword = $matches[2];
         
         
            $authStatus = $xfHasher->CheckPassword($password, $hashedPassword) ? $this::STATUS_USER_EXISTS : $this::STATUS_USER_NOT_EXISTS;
            $this->_dbConnector->ClosePreparedRequest($preparedRequest);
?>
 
Последнее редактирование:
Дайте исходы у кого накомпе остался лаунчер пж
 
У меня есть набор скриптов авторизации на XenForo REST API, там нужно немного дописать функционал, но в целом работает. Вечером скину.
 

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

Назад
Верх