Vanilla论坛和CAKEPHP与ProxyConnect SingleSignOn(SSO)集成

时间:2011-02-25 12:21:15

标签: cakephp integration single-sign-on forum

我一直在努力工作几个小时才能完成这项工作。我已经在论坛上搜索过,不能为我的生活让这个工作。对此事的任何启发都将非常感激。

我正在跑步:
香草版2.0.17.8
ProxyConnect版本1.8.4
Cakephp版本1.3.3
Croogo版本1.3.2(cakephp CMS)

我已在子文件夹app / webroot / vanilla

中安装了Vanilla论坛

安装顺利进行,我将proxyconnect插件上传到vanilla plugins文件夹。 我激活它,并加载以下网址(我已经取出http://因为我只允许发布2个链接,因为我是这里的新手)

  • 主站点URL您将使用ProxyConnect的网站的URL
    本地主机:8888 / CMRS

  • 验证URL与Vanilla分享身份信息的幕后URL 本地主机:8888 / CMRS /用户/认证

  • 注册网址用户可以在网站上注册新帐户的网址
    本地主机:8888 / CMRS /注册

  • 登录网址用户在您网站上登录的网址
    本地主机:8888 / CMRS /用户/登录香草= 1

  • 退出网址用户退出网站的网址
    本地主机:8888 / CMRS /用户/退出香草= 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注销。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

摆脱

TransientKey=
DateOfBirth=
Gender=
输出中的

因为空字符串

而导致ini字符串格式失败

答案 1 :(得分:0)

首先,在使用CakePHP的AuthComponent时,我曾经被蜇过一次,因为Cookie没有按照我在localhost上的预期工作。我没有花太多时间调查代码在生产环境中工作(在真实的域名上)。

我建议您使用逼真的域名在hosts文件中添加一个条目。假设您的生产网址为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/访问您的开发环境。之后,您需要更新Proxyconnect设置中的所有URL以及Vanilla / CakePHP配置文件中的cookie域以匹配此新域。

// 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应该创建Proxyconnect可以看到的cookie)。轻松实现这一目标的一个流行组合是使用Firefox + Firebug + Firecookie,但许多新浏览器都内置了这些工具(例如,Chrome的“资源”选项卡包含Developer Tools)。 / p>

如果CakePHP(或Vanilla)安装在子目录中,您可能需要检查在子目录中是否“沙箱化”的未创建的cookie。我相信CakePHP默认会这样做,除非你ini_set('session.cookie_path', '/');

此外,当CakePHP的Security.level设置值为high时,它将在每个请求上重新生成(随机)会话ID。我会将此设置为medium,至少在测试时。