Форум Vanilla и интеграция CAKEPHP с ProxyConnect SingleSignOn (SSO) - PullRequest
0 голосов
/ 25 февраля 2011

Я тщетно пытался заставить это работать много часов. Я обыскивал форумы и не могу всю жизнь заставить это работать. Любое освещение по этому вопросу будет высоко ценится.

Я бегу:
Ванильная версия 2.0.17.8
ProxyConnect версия 1.8.4
Cakephp Версия 1.3.3
Croogo Версия 1.3.2 (CakePHP CMS)

Я установил форум Vanilla в подпапке приложения / webroot / vanilla

Установка проходит без проблем, и я загружаю плагин proxyconnect в папку плагины vanilla. Я активирую его и загружаю следующие URL (я вынул http: //, потому что мне разрешено публиковать только 2 ссылки, так как я новичок здесь)

  • Основной URL сайта URL вашего сайта, где вы будете использовать ProxyConnect
    локальный: 8888 / КМР

  • Аутентификация URL-адреса Скрытый URL-адрес, который делится идентификационной информацией с Vanilla
    локальный: 8888 / КМР / пользователей / аутентификации

  • URL-адрес регистрации URL-адрес, по которому пользователи могут регистрировать новые учетные записи на вашем сайте
    локальный: 8888 / КМР / регистрация

  • URL для входа URL, по которому пользователи заходят на ваш сайт
    локальный: 8888 / КМР / пользователей / Логин ваниль = 1

  • URL-адрес для выхода URL-адрес, по которому пользователи выходят из вашего сайта
    локальный: 8888 / КМР / пользователей / выхода из системы ваниль = 1

Я создал действие в моем users_controller с именем authenticate ()

public function authenticate() {
    $this->layout = 'ajax';
    $this->header('Content-Type: text/plain');
    if($this->Auth->user()) {        
        $data = $this->Auth->user();
        $this->set('data', $data);
    }
}

Я создал представление authenticate.ctp, которое правильно выводит данные, если вы обращаетесь к ним напрямую и вошли в систему

<?php  
if(isset($data)) {
    echo 'UniqueID='.$data['User']['id']."\n";
    echo 'Name='.$data['User']['username']."\n";
    echo 'Email='.$data['User']['email']."\n";
    echo 'TransientKey='."\n";
    echo 'DateOfBirth='."\n";
    echo 'Gender=';
}
?>

Выходы

UniqueID=1
Name=admin
Email=you@your-site.com
TransientKey=
DateOfBirth=
Gender=

В vanilla config.php я установил

$Configuration['Garden']['Cookie']['Domain'] = '.localhost';

В Cakephp bootstrap.php я установил

ini_set('session.cookie_domain', '.localhost');

Итак, после всего этого, когда я нажимаю на кнопку входа из vanilla, меня перенаправляют на вход в приложение для торта, и когда я захожу, я не захожу на Vanilla Forum.

Когда я выхожу из Vanilla, меня перенаправляют в приложение для торта, и я выхожу из него, но не из Vanilla.

Любые предложения будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Избавьтесь от

TransientKey=
DateOfBirth=
Gender=

от вашего вывода, так как это приведет к сбою формата строки INI из-за пустых строк

0 голосов
/ 25 февраля 2011

Во-первых, однажды меня ужалили, когда я работал с CakePHP AuthComponent, когда куки не работали так, как я ожидал от localhost.Я не тратил много времени на изучение того, как код работал в производственной среде (на реальном доменном имени).

Я предлагаю вам добавить запись в ваш файл hosts с реалистично выглядящим доменным именем.Предполагая, что ваш рабочий URL будет http://www.example.com/ или http://forum.example.com/, вы можете сопоставить поддельный домен разработки с тем же доменным именем, обновив файл hosts следующим образом:

127.0.0.1       localhost dev.example.com

Затем вы получите доступ к своемусреда разработки, использующая http://dev.example.com:8888/ вместо http://localhost:8888/. После этого вам потребуется обновить все URL-адреса в настройках Proxyconnect и домены cookie в файлах конфигурации Vanilla / CakePHP, чтобы они соответствовали этому новому домену..

// http://dev.example.com:8888/cmrs
// http://dev.example.com:8888/cmrs/users/authenticate
// http://dev.example.com:8888/cmrs/register
// http://dev.example.com:8888/cmrs/users/login?vanilla=1
// http://dev.example.com:8888/cmrs/users/logout?vanilla=1
$Configuration['Garden']['Cookie']['Domain'] = '.example.com';
ini_set('session.cookie_domain', '.example.com');

Во-вторых, вы должны использовать инструмент разработки для проверки любых создаваемых файлов cookie, проверяя, действительно ли они создаются с правильными настройками домена и пути (я полагаю, CakePHP должен создавать файлы cookie, которые Proxyconnectможно увидеть).Популярная комбинация для этого - использовать Firefox + Firebug + Firecookie , но во многие новые браузеры встроены эти инструменты (например, вкладка Ресурсы в Chrome включена DeveloperИнструменты ).

Если CakePHP (или Vanilla) установлен в подкаталоге, вам может потребоваться проверить, не создаются ли «cookie-файлы» в подкаталоге.Я полагаю, что CakePHP сделает это по умолчанию, если только вы не ini_set('session.cookie_path', '/');.

. Кроме того, когда параметр CakePHP Security.level имеет значение high, он будет генерировать (случайный) идентификатор сеанса для каждого запроса.Я бы установил это на medium, по крайней мере, во время тестирования.

...