Автологин в джумлу из стороннего движка.

Тема в разделе "Программирование", создана пользователем DimoninG, 21.07.2009.

  1. Offline

    DimoninG Недавно здесь

    Регистрация:
    21.07.2009
    Сообщения:
    1
    Симпатии:
    0
    [Joomla 1.5.9.] У меня есть собственный движок. Но решил я попробовать часть сайта сделать на джумле. Засунул ее в подкаталог, синхронизировал базы пользователей. Теперь задача - когда входят в аккаунт на моем сайте, чтобы и в джумле тоже автоматически (прозрачно) заходило. То есть логин в моем движке значит и логин в джумле.

    Я использовал вот такой код, чтобы сделать джумло-сессию:

    Код (PHP):
    1. global $_SERVER;
    2. define( '_JEXEC', 1 );
    3. define( 'DS', DIRECTORY_SEPARATOR );
    4. $baseFolder = 'C:/www/site/joomla/';
    5. define('JPATH_BASE', $baseFolder );
    6. define('HTTP_HOST', 'http://site/joomla/' );
    7. $_SERVER['HTTP_HOST'] = 'http://site/joomla/';
    8. $_SERVER['SCRIPT_NAME'] = 'index.php';
    9. $_SERVER['SCRIPT_FILENAME'] = 'index.php';
    10. require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    11. require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
    12. $mainframe =& JFactory::getApplication('site');
    13. $mainframe->initialise();
    14. JPluginHelper::importPlugin('system');
    15. $mainframe->triggerEvent('onAfterInitialise');
    16. $options = array();
    17. $options['remember'] = true;
    18. $options['return'] = 'index.php';
    19. $credentials = array();
    20. $credentials['username'] = 'login';
    21. $credentials['password'] = 'pass';
    22. $mainframe->login($credentials, $options);


    В отдельном файле работает отлично. Но если вставить этот код в мой код (там, где авторизация происходит у меня), то выходит следующее: все переменные как будто бы обнуляют свои значения. Ощущение, что пробегая этот код интерпретатор сбрасывает значения вообще всего, подключение к бд и сессии в том числе. Я даже подозреваю, что так и задумывалось. Но как мне это обойти? Может быть есть другой способ сделать сессию авторизации в джумле "ручками" из моего движка?
     
  2.  
  3. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    По сути авторизация это:

    * Запись в таблицу сессий новой сессии
    * Отдача пользователю правильной куки, что бы джумла воспринимала его как своего

    Вопрос - движок и джумла на разных доменах? Если да, то отдать ему куку не получится, ибо браузер тупо не примет ее для домена джумлы.
     
  4. Offline

    kr0k Недавно здесь

    Регистрация:
    09.12.2010
    Сообщения:
    13
    Симпатии:
    0
    Пол:
    Мужской
    Похожая ситуация.
    Я имею огромный парк сайтов. Авторизация на одно означет авторизацию на всех.
    В двух словах при авторизации происходит отправка данных в аккаунтинг(login.by), этот login.by выставляет на всем парке сайтов куку(isLogin) с уникальным значением. Да я знаю что нельзя выставить куку для другого домена, но я выставляю.
    Так вот аутентификация на сайте Джумлы происходит в момент как пользователь с правильной кукой зашел на сайт, скрипт опять обращаеться в в аккаунтинг(login.by) но у же не с логином и паролем, а с кукой(isLogin). На что получает ответ что по этой сесси вошел пользователь "user11". Как мне заставить джумлу аутентифицировать этого пользователя, я не знаю его пароля(!!). Только имя пользователя и команду с верху что надо произвести логин.

    Я так понимаю что мне нужно будет влезть в механизм старта сесии и выстваления джумловской куки. Но что-то в документации я не нашел описание механизма аутентификации.
     
  5. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Думаю, что стоит использовать такую схему
    [​IMG]

    Суть такая - у вас есть цепочка сайтов, в которой вы хотите ввести массовую авторизацию. При авторизации на любом сайте из этой цепочки цепочки управление передается "Auth server", лучше, что бы это был отдельный сервер. На сервер передаются логин и пароль вошедшего пользователя, желательно в зашифрованном виде. Сервер пробегает по всей цепочке сайтов и авторизирует текущего пользователя на каждом сайте цепи. Вот материал, который поможет при организации "кукисов" )))

    З,Ы,: решение имеет место быть, ТОЛЬКО в случае одинакового набора пользователей на всех сайтах, либо можно централизовать этот набор на Auth-сервере.
     
  6. Offline

    kr0k Недавно здесь

    Регистрация:
    09.12.2010
    Сообщения:
    13
    Симпатии:
    0
    Пол:
    Мужской
    Сервер естественно, отдельный и даже не один.
    В принципе проблему решил, остались еще пару тонкостей...но это мелочи.
    Синхронизация.. да же не знаю а зачем. Логин сейрвер говорит что это "Вася2010", его в базе текущего сайта нету, он быстренько по имеющимся данным создается и все счастливы. Т.е. схема примерно следующая
    1. Проверка, есть ли кука? Валидная ли имеющаяся кука, если есть?
    2. Есть ли в базе этот пользователь? Создание пользователя, если нету.
    3. Логин пользователя.
     
  7. Лат
    Offline

    Лат Звоните 8 (905) 778-52-44

    Регистрация:
    31.01.2007
    Сообщения:
    1 751
    Симпатии:
    113
    Пол:
    Мужской

Поделиться этой страницей

Загрузка...