Цель:
1. Единая база пользователей для нескольких сайтов (все сайты используют одну базу данных, префиксы разные)2. Авторизовавшись на одном сайте, нужно быть автоматически авторизованным на всех остальных.
3. Отправив сообщение пользователю на первом сайте, дать ему возможность прочитать его на любом другом
Решение
1. хак файла \core\classes\db.class.php. -> Единая база пользователейДля этого не обязательно, чтобы сайты были поддоменами — важна лишь единая база данных
2. хак файла \core\cms.php -> Единые куки для всех сайтов.
А вот для этого сайты обязательно должны быть поддоменами одного домена + сам основной домен.
Код
1. db.class.phpДобавить в блок объявлений переменных строку
public $users_prefix = 'my';
в метод
public function query($sql, $ignore_errors=false, $replace_prefix = true){
$sql = $replace_prefix ? $this->replacePrefix($sql) : $sql;
$prefix = cmsConfig::getConfig('db_prefix'); if ($this->users_prefix !== $prefix) { }
2. cms.php
в блок объявления переменных добавить строку
private static $maindomain = '.site.ru';
заменить метод
}
}
public static function unsetCookie($name){ }
public static function unsetCookie($name){ }
Файлы для 1.10.3
скачатьПеред заменой — обязательно сделать копии своих файлов. Для других версий инстанта можно руками поменять код в файлах.
Пример:
1. izhevsk.pechenuka.ru/2. sochy.pechenuka.ru/
3. moscow.pechenuka.ru/
Как проверить — зайти на любой сайт, авторизоваться под user1 123123 (либо зарегать нового юзера — проще всего это сделать на первом домене). Потом зайти на второй сайт уже авторизованным.
Выход из аккаунта работает после перезагрузки браузера — удаление сессий со всех сайтов не делал. То есть выходим с любого сайта, закрываем/открываем браузер и проверяем.
Реклама #
Def 11 лет назад #
Endroid 11 лет назад #
BELIEVER 11 лет назад #
MauND 11 лет назад #
Например так как при создание англоязычной версии контент должен размещаться разные:)Следовательно базы думаю должны быть разные:)
SJen 11 лет назад #
Су-27 11 лет назад #
stealthdebuger 11 лет назад #
Считаю, что именно с таким подходом можно поднять привлекательность InstantCMS среди простых обывателей.
Спасибо за ваш труд.
SJen 11 лет назад #
Су-27 11 лет назад #
SJen 11 лет назад #
tokarev 11 лет назад #
tokarev 11 лет назад #
SJen 11 лет назад #
lokanaft 11 лет назад #
Князь Мышкин 11 лет назад #
alexbabo 11 лет назад #
Подробнее можно инструкцию?
SJen 11 лет назад #
Вариант 1 (для 1.10.3). Скачать файлы и заменить у себя. Все.
Вариант 2 (для <1.10.3). Внести по порядку все изменения, прописанные в топике. Все.
Там две цели -
1. Единая база пользователей (правим db.class.php)
2. Сквозная авторизация (правим cms.php)
Если надо и то и другое - правим/заменяем оба файла. Если надо что-то одно - правим один файл.
alexbabo 11 лет назад #
В 1 и 2 случае надо файлы заменить на всех сайтах?Или только поддоменах или только на главном сайте?
И не надо вносить изменения в базу данных?Добавлять новую таблицу пользователей?
Для самопознания:
Интересно для дилетанта,я нигде не заметил обращения к определённой базе,как же распознает чужой сайт, к какой базе с нужной таблицей пользователей, подключиться?
С общей базой понятно,пользователь имеет свой профиль на каждом сайте и имеет все права.А при сквозной авторизации пользователь ,попавший с другого сайта,лимитирован в действиях?Оставив комментарий или написав пост, статью-в какой базе этот материал хранится и и кликнув по никнейму автора поста,переход будет в профиль на родной сайт пользователя?
SJen 11 лет назад #
alexbabo 11 лет назад #
SJen 11 лет назад #
1. перенумеровывать пользователей во всех базах кроме основной (перед тем, как слить их в одну базу).
2. соответственно вносить изменения в таблицу блогов, клубов, комментов и других компонентов, в которых есть ссылка на пользователей.
Проще, конечно, изначально все делать в одной базе - вот разделить их потом (при необходимости) не проблема. А слить в одну пользователей из разных баз непросто.
alexbabo 11 лет назад #
Michail 11 лет назад #
SJen 11 лет назад #
Endroid 11 лет назад #
Шадринец 11 лет назад #
SJen 11 лет назад #
webscs 10 лет назад #
У меня вот такой вопрос: "цель: Городской порта на поддоменах, news.domen.ru, board.domen.ru и т.д. единую авторизацию на под доменах рулим хаком, а обязательно ли префиксы делать разные? ведь все что относится к новостям будет выводиться только на news.domain.ru, модуль объявления - только на board.domain.ru"
Я где то читал, что такое лучше делать изменением в настройках под доменов на серваке в аппаче. Так как будет оптимальнее?
maia 10 лет назад #
Greko 10 лет назад #
Greko 10 лет назад #
Все делаю пошагово и ничего не происходит. Или это действует только на одинаковых версиях инстанта? У меня ода 1.10.1 а вторая 1.10.3
Greko 10 лет назад #
Greko 10 лет назад #
Greko 10 лет назад #
Евгений 10 лет назад #
Intrerio 10 лет назад #
Capitan 10 лет назад #
1. копирую файлы в поддомен
2. прописываю префикс ОСНОВНОЙ БД
3. прописываю основной домен
и ничего не меняется
Intrerio 10 лет назад #
Шадринец 10 лет назад #
Nikit 10 лет назад #
Александр 9 лет назад #
и кстати в примере только 1 и 3 ссылка куки воспринимает.
Александр 9 лет назад #
broman 9 лет назад #
broman 9 лет назад #
Ї Ђãîķℳāŋ Ї 9 лет назад #
sosed 8 лет назад #
DeusSpa 7 лет назад #
Если подобное решения для объединения базы пользователей?
И синхрона авторизации, с главный сайт на 2 ветке, поддомен на 1 ветке.