Мне на своем проекте понадобилась одновременная регистрация пользователей на суб-проектах и на основном сайте.
структура в целом проекта такая:
site.ru — основной сайт на инстанте
subproect1.site.ru — субпроект №1
subproect2.site.ru — субпроект №2
subproect3.site.ru — субпроект №3
subproect4.site.ru — субпроект №4
При регистрации пользователей на любом из сайтов субпроекта, автоматически создается пользователь в InstantCMS на основном сайте site.ru
Для этого написан был универсальный мост.
Мост представляет из себя всего 1 файл bridge.php, который кладется в корень сайта с instantCMS и позволяет регистрировать пользователей любым сторонним скриптом.
Для этого нужно сделать POST запрос по адресу моста (site.ru/bridge.php). POST-запрос состоит всего из одного поля "regdata", в который должен быть упакован массив с информаций о регистрации, следующим способом:
base64_encode(serialize($data));
Где $data — это массив в формате:
array(
'login' => $login,
'pass' => $pass,
'email' => $email,
'sign' => $sign
);
$sign — это строка с секретным словом, своего рода подпись. Используется для защиты моста от злоумышленников.
Точно такое же значение следует присвоить переменной $sign в файле bridge.php
Значения остальных полей очевидны.
Скрипт моста может выдавать следующие ответы:
error1 — отсутствует $_POST['regdata'] в запросе,
error2 — распакованное содержимое $_POST['regdata'] не является массивом,
error3 — не совпадает секретное слово,
loginIsBusy — пользователь с таким логином уже существует,
error4 — ошибка при занесении пользователя в базу данных,
ok — регистрация прошла успешно.
код файла bridge.php :
<?php $sign = 'secret<#45t@ddSSdfaj5+q-_pass'; // Секретное слово include(PATH.'/core/cms.php'); $inCore = cmsCore::getInstance(); $inDB = cmsDatabase::getInstance(); $inCore->loadClass('user'); $inCore->loadClass('actions'); $login = $data['login']; $nickname = $data['login']; $email = $data['email']; $icq = ''; $birthdate = '1980-01-01'; $sql = "SELECT id, login FROM cms_users WHERE login LIKE '$login' AND (is_deleted = 0)"; $result = $inDB->query($sql) ; $sql = "INSERT INTO cms_users (group_id, login, nickname, password, email, icq, regdate, logdate, birthdate, is_locked, is_logged_once, invited_by) VALUES ('1', '$login', '$nickname', '$pass', '$email', '$icq', NOW(), NOW(), '$birthdate', '0', 0, '0')"; $inDB->query($sql) ; $new_user_id = dbLastId('cms_users'); //create advanced user profile if ($new_user_id){ $sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who) VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')"; $inDB->query($sql) ; $user_array['id'] = $new_user_id; } else{ } // Регистрируем событие 'object' => '', 'user_id' => $new_user_id, 'object_url' => '', 'object_id' => $new_user_id, 'target' => '', 'target_url' => '', 'target_id' => 0, 'description' => '' )); ?>
Если желаете развития идеи, то пишите свои пожелания, будем реализовывать.