Универсальный мост для instantcms

совместная регистрация пользователей из других движков в instantcms

#1 24 октября 2012 в 09:49
Написал в один из коллективных блогов, но видать там администратор будет долго еще проверять пост, решил сюда запостить.

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

структура в целом проекта такая:

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 :

  1.  
  2.  
  3. <?php
  4.  
  5. $sign = 'secret<#45t@ddSSdfaj5+q-_pass'; // Секретное слово
  6.  
  7. if(!isset($_POST['regdata'])) die('error1');
  8.  
  9. $data = @unserialize(base64_decode(trim($_POST['regdata'])));
  10.  
  11. if(!is_array($data)) die('error2');
  12. if($data['sign'] != $sign) die('error3');
  13.  
  14. define('PATH', dirname(__FILE__));
  15. define("VALID_CMS", 1);
  16.  
  17. include(PATH.'/core/cms.php');
  18.  
  19. $inCore = cmsCore::getInstance();
  20. $inDB = cmsDatabase::getInstance();
  21.  
  22. $inCore->loadClass('user');
  23. $inCore->loadClass('actions');
  24.  
  25. $login = $data['login'];
  26. $pass = md5($data['pass']);
  27. $nickname = $data['login'];
  28. $email = $data['email'];
  29. $icq = '';
  30. $birthdate = '1980-01-01';
  31.  
  32. $sql = "SELECT id, login FROM cms_users WHERE login LIKE '$login' AND (is_deleted = 0)";
  33. $result = $inDB->query($sql) ;
  34. if($inDB->num_rows($result)!=0) die('loginIsBusy');
  35.  
  36. $sql = "INSERT INTO cms_users (group_id, login, nickname, password, email, icq, regdate, logdate, birthdate, is_locked, is_logged_once, invited_by)
  37. VALUES ('1', '$login', '$nickname', '$pass', '$email', '$icq', NOW(), NOW(), '$birthdate', '0', 0, '0')";
  38. $inDB->query($sql) ;
  39.  
  40. $new_user_id = dbLastId('cms_users');
  41.  
  42. //create advanced user profile
  43. if ($new_user_id){
  44.  
  45. $sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
  46. VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')";
  47. $inDB->query($sql) ;
  48.  
  49. $user_array['id'] = $new_user_id;
  50. }
  51. else{
  52. die('error4');
  53. }
  54.  
  55. // Регистрируем событие
  56. cmsActions::log('add_user', array(
  57. 'object' => '',
  58. 'user_id' => $new_user_id,
  59. 'object_url' => '',
  60. 'object_id' => $new_user_id,
  61. 'target' => '',
  62. 'target_url' => '',
  63. 'target_id' => 0,
  64. 'description' => ''
  65. ));
  66.  
  67. die('ok');
  68.  
  69. ?>
  70.  
  71.  
Совместной регистрации не делали, также как автоматическая регистрация с конкретными движками. У нас на субпроектах просто сайты не на распространенных движках, поэтому не ставилось такой задачи.
Если желаете развития идеи, то пишите свои пожелания, будем реализовывать.
#2 24 октября 2012 в 09:52
А суть данного поста? прочитал раз 5 могу сказать только что я РАД за вас и за ваш МОСТ.
#3 24 октября 2012 в 10:10
ХрюнделЪ, не обращайте внимания, это у него ревность!!! smile
#4 24 октября 2012 в 10:15

Если желаете развития идеи, то пишите свои пожелания, будем реализовывать.

ХрюнделЪ
При переходе с одного сайта на другой заново нужно входить в систему?
#5 24 октября 2012 в 10:35


А суть данного поста? прочитал раз 5 могу сказать только что я РАД за вас и за ваш МОСТ.

maxisoft

Моё дело поделиться наработкой, а всем уже решать нужна она им или нет.
#6 24 октября 2012 в 10:36


Если желаете развития идеи, то пишите свои пожелания, будем реализовывать.

ХрюнделЪ
При переходе с одного сайта на другой заново нужно входить в систему?

eoleg

Этот скрипт просто облегчает автоматическую регистрацию (добавление новых) пользователей одновременно на нужном сайте на базе instantcms.
Единую сессию и т.д. т.п не реализовывали.
#7 24 октября 2012 в 10:38


ХрюнделЪ, не обращайте внимания, это у него ревность!!! smile

Ленивый

спасибо за поддержку.
#8 24 октября 2012 в 10:50
Вот если бы с phpBB3 кто осилил наконец полноценную дружбу, я бы на радости такой на ящик пива раскошелился ))
А подобные куцые наработки не особо интересны…
#9 24 октября 2012 в 11:34
ХрюнделЪ, крут, крут
#10 24 октября 2012 в 13:09


Вот если бы с phpBB3 кто осилил наконец полноценную дружбу, я бы на радости такой на ящик пива раскошелился ))
А подобные куцые наработки не особо интересны...

Anor

Опишите пожалуйста более детально, рассмотрим и постараемся выделить свободное время на реализацию.
Что именно нужно, как и т.д. т.п.
#11 24 октября 2012 в 13:10


ХрюнделЪ, крут, крут

FreeLancer

да куда там… как выше написали "куцый" скрипт.
#12 24 октября 2012 в 13:46

ХрюнделЪ, не обращайте внимания, это у него ревность!!

Ленивый
maxisoft тонко намекает что неплохо бы увидеть сабж в живую
а то пока здесь обсуждение сферического коня которого никто никогда не видел
#13 24 октября 2012 в 14:34



Вот если бы с phpBB3 кто осилил наконец полноценную дружбу, я бы на радости такой на ящик пива раскошелился ))
А подобные куцые наработки не особо интересны...

Anor

Опишите пожалуйста более детально, рассмотрим и постараемся выделить свободное время на реализацию.
Что именно нужно, как и т.д. т.п.

ХрюнделЪ

maxisoft писал подобное, что то подзабросил. Где то на форуме ветка есть по теме…
#14 24 октября 2012 в 14:34
r2, хм, здесь слишком просто, чтобы живость показывать, вот как выше написали если сделать автоматическую интеграцию с конкретными движками, тогда можно и площадку тестовую выкладывать…
А так это простой скрипт, который служит прослойкой между двумя сайтами один из которых инстант.
Если в дальнейшем расширен будет функционал, тогда выставлю площадку тестовую. Просто нам с другими движками именно конкретными нет нужды делать интеграцию…

Пусть народ напишет пожелания более детально, будем реализовывать на благо сообщества.
#15 24 октября 2012 в 14:35
Anor, хех возможно поэтому такая реакция :)

з.ы. честно не знал о его попытках, просто была нужда в этом мы и реализовали для себя… из благих намерений поделился…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.