2011-02-25 70 views
0

我一直试图在很长时间内使这个工作。我已经在论坛上搜索过,并且不能为我的生活得到这个工作。任何关于此事的照明将非常感激。Vanilla论坛和CAKEPHP与ProxyConnect SingleSignOn(SSO)的集成

我运行:
香草版本

我已经安装了香草2.0.17.8
ProxyConnect版本1.8.4
CakePHP的版本1.3.3
Croogo版本1.3.2(CakePHP的CMS)论坛在子文件夹应用程序/ webroot /香草

安装顺利,我上传proxyconnect插件到香草插件文件夹。 我激活它,和负载以下网址(我已经采取了HTTP://因为我只允许作为我在这里一个新手后2个链接)

  • 主要网站网址的网址您网站,您将使用ProxyConnect
    本地主机:8888/CMRS

  • 身份验证URL的幕后花絮与香草共享身份信息的网址
    本地主机:8888/CMRS /用户/验证

  • 报名网址的URL,用户可以在网站上注册新的账号
    本地主机:8888/CMRS /注册

  • 登录在URL,用户在网站上
    本地主机登录的网址:8888/CMRS ?/用户/密码香草= 1

  • 注销URL的URL,用户退出网站的
    本地主机:8888/CMRS /用户/注销香草= 1

我有创造了一个ction在

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

我创建了正确的输出数据,如果你直接访问它,你在

<?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='; 
} 
?> 

输出记录视图authenticate.ctp我users_controller称为身份验证()

UniqueID=1 
Name=admin 
[email protected] 
TransientKey= 
DateOfBirth= 
Gender= 

In vanilla config.php我已经设置了

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

在CakePHP的bootstrap.php我已经设置

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

所以,毕竟,当我在登入点击香草我重定向到蛋糕的应用程序登录,当我登录,我不是在香草论坛登录。

当我从香草中注销时,我被重定向到蛋糕应用程序,并从该香蕉注销,但不是从香草注销。

任何建议将不胜感激。

回答

0

首先,我在使用CakePHP的AuthComponent时曾经被刺痛过一次,而Cookie在我预期的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/访问你的开发环境。之后,您需要更新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应该创建的cookie是Proxyconnect可以看到)创建。一个很容易做到这一点的流行组合是使用Firefox + Firebug + Firecookie,但许多新浏览器都内置了这些工具(例如Chrome的Developer Tools中的Resources选项卡)。

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

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

+0

感谢您的反馈。事实上,尽管cookie域设置为覆盖子域,但我将香草论坛放置在子文件夹中。我正在用firecookie使用firebug进行检查。我将security.level设置为低。看来我的问题是,我在Wildboom建议的验证字符串中包含空值。 – Manu 2011-03-04 07:10:55

1

从你的输出,因为这将失败的INI字符串格式摆脱

TransientKey= 
DateOfBirth= 
Gender= 

由于空字符串

+0

这似乎是问题所在。谢谢! – Manu 2011-03-04 07:11:19