DevCraft - Разработка приложений

Приветствую!

Это новый и обновлённый сайт maxim-harder.de! Если вы были зарегистрированы на старом сайте, то восстановите свой пароль на сайте!

Создай свой аккаунт!

Хак DLE+IPS/IPB Интеграция

Maxim

Интересующийся
Команда форума

Maxim

Интересующийся
Команда форума
Реакции
100% 0% 0%
Версия DLE
12.х
1510831226_dleips.png
  • Автор: Maxim Harder, Celsoft
  • Версия DLE: 10.х, 11.х, 12.х
  • Версия: 1.0
Это небольшая инструкция по созданию общей авторизации между двумя системами - Datalife Engine и Invision Power Suite.
Данный метод будет работать только если ваши базы данных на локальном сервере и для подключения вы используете localhost, либо знаете точный адрес до базы данных - иначе не сработает.

Что может эта интеграция?
  • Если есть пользователь в базе данных DLE, то система IPS авторизует его без проблем
  • IPS создаёт пользователя на основе данных в базе DLE
  • Работает односторонне

"4.2.5" "4.4.4"


  • Инструкция:
    1. Открываем админку IPS и переходим в управление авторизацией: (на примере IPS v4.2.5)
      1510833624_2017-11-16-12_59_19-vneshnyaya-baza-dannyh-yandeks_brauzer.png
    2. Активируем внешнюю авторизацию. Жмём.
      1510833698_2017-11-16-13_00_56-metody-avtorizacii-yandeks_brauzer.png 1510833665_2017-11-16-13_01_30-metody-avtorizacii-yandeks_brauzer.png
      если вас не перенесло автоматически, то нажмите на карандаш справа.
    3. Заполняем данные базы данных, где находится DLE
    4. Детали схемы базы данных
      1510833857_2017-11-16-13_04_55-vneshnyaya-baza-dannyh-yandeks_brauzer.png
      Заполняем
      • Таблица: *ваш префикс*_users
      • Колонка имён пользователей: name
      • Колонка Email адресов: email
      • Колонка паролей: password
      • Тип шифрования паролей: Если у вас версия DLE 11.1 и меньше - берём значение MD5, если больше - Обычный текст
        Дело в том, что начиная с версии 11.2 в DLE сменился хеш паролей и MD5 более не подходит. Мы всё подправим в файле внешней авторизации. Посему - можете спокойно обновлять DLE.
      • Дополнительное условие: banned<>1
        Этот параметр не даст забанненым пользователям авторизоваться на форуме
      • Сохраняем
    5. Открываем файл форум/system/Login/External.php
      • Ищем строчку (похожую)
        PHP:
        if ( !\IPS\Login::compareHashes( $this->encryptedPassword( $values['password'] ), $result[ $this->settings['db_col_pass'] ] ) )
        {
        throw new \IPS\Login\Exception( 'login_err_bad_password', \IPS\Login\Exception::BAD_PASSWORD, NULL, $member );
                }
      • Выше(!) ставим:
        PHP:
        switch ( $this->settings['db_encryption'] )
        {
        case 'plaintext':
        if(!password_verify($values['password'], $result[ $this->settings['db_col_pass'] ] ) ) {
        throw new \IPS\Login\Exception( 'login_err_bad_password', \IPS\Login\Exception::BAD_PASSWORD, NULL, $member );
        }
        break;
        
                    default:
      • и ниже
        PHP:
        break;
                }
      • Ищем
        PHP:
        return md5( $password );
      • меняем на
        PHP:
        return md5( md5( $password ) );
      • Ищем:
        PHP:
        return $password;
      • меняем на:
        PHP:
        return password_hash($password, PASSWORD_DEFAULT);
      • Сохраняем
    6. Радуемся



  • Точно не уловил с какой версией они обновили проверку данных, но на актуальной, на данный момент (4.4.4), выглядит всё вот, что не нужно править никаких файлов.

    1. Заходим в админпанеле IPS в раздел "Авторизация и регистрация"
    Screenshot_1.png
    2. Нажимаем на кнопку "Создать"
    w-ES3z7UQF2pDzzgTx-T6Q.png
    3. Выбираем "База данных MySQL"
    373
    4. Указываем название соединения, данные базы данных вашего DLE и прописываем нужные поля.
    Заполняем
    • Таблица: *ваш префикс*_users
    • Колонка имён пользователей: name
    • Колонка Email адресов: email
    • Колонка паролей: password
    • Тип шифрования паролей: Выбираем "Другой". Описание ниже.
    • Дополнительное условие: banned<>1
    Если у вас DLE 11.1 и ниже, то в появившееся поле "Хэш-код пароля" прописываем:
    DLE 11.1:
    return md5(md5($providedPassword));
    В поле "Код подтверждения пароля" вставляем (!Не уверен в данной комбинации!):
    DLE 11.1:
    return \IPS\Login::compareHashes( $row['password'], md5( md5( $providedPassword));
    В версиях DLE 11.2 и выше в поле "Хэш-код пароля" вставляем:
    DLE 11.2:
    return password_hash( $providedPassword, PASSWORD_DEFAULT );
    В поле "Код подтверждения пароля" вставляем:
    DLE 11.2:
    return password_verify( $providedPassword, $row['password'] );
    Так-же, IPS даёт нам на выбор, что должно произойти с данными пользователей, что очень удобно.
    374

    Настраивайте под себя! Удачи!

 
Последнее редактирование:

catyr

Новичок

catyr

Новичок
Реакции
0% 0% 0%
Что то на IPS Community Suite 4.3.6 не работает интеграция:( и выше. Хотя на 4.2.8 все прекрасно.
 

Maxim

Интересующийся
Команда форума

Maxim

Интересующийся
Команда форума
Реакции
100% 0% 0%
Что то на IPS Community Suite 4.3.6 не работает интеграция:( и выше. Хотя на 4.2.8 все прекрасно.
не тестировал пока ещё... через пару месяцев освобожусь и гляну точно
 

Maxim

Интересующийся
Команда форума

Maxim

Интересующийся
Команда форума
Реакции
100% 0% 0%
Обновил инструкцию для версии IPS 4.4.4
 

Maxim

Интересующийся
Команда форума

Maxim

Интересующийся
Команда форума
Реакции
100% 0% 0%

Верх