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

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

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

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

Maxim

Maxim

Проверенный
Команда форума
Регистрация
17 Фев 2015
Сообщения
21
Симпатии
0
Баллы
526
#1
Версия DLE
12.х

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

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


Инструкция:
  1. Открываем админку IPS и переходим в управление авторизацией: (на примере IPS v4.2.5)
  2. Активируем внешнюю авторизацию. Жмём.

    если вас не перенесло автоматически, то нажмите на карандаш справа.
  3. Заполняем данные базы данных, где находится DLE
  4. Детали схемы базы данных

    Заполняем
    • Таблица: *ваш префикс*_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. Радуемся
 
Последнее редактирование:
Сверху Снизу