Comp-Star » InstantCMS » InstantCMS Разное » Сквозная авторизация и единая база пользователей для InstantCMS 1.10.3
Информация к новости
  • Просмотров: 1814
  • Автор: Compstar
  • Дата: 31-10-2013, 14:10
  • 0
31-10-2013, 14:10

Сквозная авторизация и единая база пользователей для InstantCMS 1.10.3

Категория: InstantCMS » InstantCMS Разное

Сквозная авторизация и единая база пользователей для InstantCMS 1.10.3

 

Цель Хака

1. Единая база пользователей для нескольких сайтов (все сайты используют одну базу данных, префиксы разные)
2. Авторизовавшись на одном сайте, нужно быть автоматически авторизованным на всех остальных.
3. Отправив сообщение пользователю на первом сайте, дать ему возможность прочитать его на любом другом

 

Решение

1. хак файла coreclassesdb.class.php. -> Единая база пользователей
Для этого не обязательно, чтобы сайты были поддоменами - важна лишь единая база данных

2. хак файла corecms.php -> Единые куки для всех сайтов.
А вот для этого сайты обязательно должны быть поддоменами одного домена + сам основной домен.

Код

1. db.class.php
Добавить в блок объявлений переменных строку

Код PHP:
  1. public $users_prefix = 'my';

где "my" - это ваш префикс таблиц, в которых хранятся пользователи. Например, префикс БД для основного домена.

в метод

Код PHP:
  1. public function query($sql, $ignore_errors=false, $replace_prefix = true){

добавить после

Код PHP:
  1. $sql = $replace_prefix ? $this->replacePrefix($sql) : $sql;

строки

Код PHP:
  1.  
  2. $prefix = cmsConfig::getConfig('db_prefix');
  3. if ($this->users_prefix !== $prefix) {
  4. $sql = trim(str_replace($prefix.'_user',$this->users_prefix.'_user',$sql));
  5. }
  6.  

После этого все сайты будут обращаться к единой базе пользователей.

2. cms.php
в блок объявления переменных добавить строку

Код PHP:
  1.  
  2. private static $maindomain = '.site.ru';
  3.  

где site.ru - это ваш основной домен. Это нужно для единых кукисов.

заменить метод

Код PHP:
  1.  
  2. public static function setCookie($name, $value, $time){
  3. setcookie('InstantCMS['.$name.']', $value, $time, '/', null, false, true);
  4. }
  5.  

на

Код PHP:
  1.  
  2. public static function setCookie($name, $value, $time){
  3. setcookie('InstantCMS['.$name.']', $value, $time, '/', self::$maindomain, false, true);
  4. }
  5.  

заменить

Код PHP:
  1.  
  2. public static function unsetCookie($name){
  3. setcookie('InstantCMS['.$name.']', '', time()-3600, '/');
  4. }
  5.  

на

Код PHP:
  1.  
  2. public static function unsetCookie($name){
  3. setcookie('InstantCMS['.$name.']', '', time()-3600, '/',self::$maindomain);
  4. }
  5.  

Внимание! У вас нет прав для просмотра скрытого текста.

 

Перед заменой - обязательно сделать копии своих файлов. Для других версий инстанта можно руками поменять код в файлах.

Пример:

1. http://izhevsk.pechenuka.ru/
2. http://sochy.pechenuka.ru/
3. http://moscow.pechenuka.ru/

 

 


Как проверить - зайти на любой сайт, авторизоваться под user1 123123 (либо зарегать нового юзера - проще всего это сделать на первом домене). Потом зайти на второй сайт уже авторизованным.
Выход из аккаунта работает после перезагрузки браузера - удаление сессий со всех сайтов не делал. То есть выходим с любого сайта, закрываем/открываем браузер и проверяем.

Автор хака: SJen

 




0


Метки к статье: InstantCMS 1.10.3, Хак

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.