2

我正在尝试在 Joomla 和我的 CakePHP (1.3) 应用程序之间编写 SSO。用户应该能够登录 Joomla,单击链接转到 CakePHP 应用程序并使用同一用户登录。

在我的 users_controller 中,我有一个名为“joomlalogin()”的操作,我在其中读取 Joomla 会话变量,检查 joomla 用户是否已存在于我的 CakePHP 应用程序中,如果不存在则创建用户。这一切都有效。

问题是我似乎无法使用 Auth->login() 手动登录用户。我尝试传递完整用户,尝试传递 user_id。该函数返回“true”,但当我进入下一页时,登录似乎失败了。这是代码的一个版本:

$existing_user= $this->User->find('first', array('conditions' => array('User.joomla_userid' => $joomla_user->id)));
if ($existing_user && $this->Auth->login($existing_user)) {
  $this->Session->setFlash('You have successfully logged in.');
  //debug($this->Auth);
  $this->redirect('/users');
}

出现闪烁消息,重定向发生,但它立即被重定向到(常规非 sso)登录表单,因为匿名用户不允许使用“/users”。

如果用户没有真正登录,为什么 Auth->login() 返回“true”。当我查看 Auth->User() 时,它包含正确的用户数据,一切都表明用户已登录,直到重定向发生. 知道这可能是什么原因或我做错了什么吗?

4

3 回答 3

1

我遇到了同样的问题。原来在我的服务器虚拟机上运行的系统时钟不正确。我运行了这个命令来更新它。

ntpdate time.windows.com

请注意,这并不能解决根本问题,即由于时钟周期被暂停和暂停的性质,VM 难以保持准确的时间。与您的服务器管理员联系以获得更永久的解决方案。为@Olivier 的小费干杯

于 2012-09-04T00:52:17.140 回答
0

检查是否为您要跨用户信息携带的所有控制器启用了会话;通常将它放在 AppController 中很方便。

例如:

class AppController extends Controller {

    public $helpers = array('Html', 'Form');

    public $components = array('Auth', 'RequestHandler', 'Session', 'Security');

}
于 2012-09-03T18:18:13.683 回答
0

我好像找到了原因。该问题与包含 Joomla 文件(访问 Joomla 会话数据和用户)有关。如果我尝试使用不包含这些文件的功能登录用户,它确实有效。一些搞砸的代码是:

require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');
$joomla_mainframe = JFactory::getApplication('site');
$joomla_mainframe->initialise();
$joomla_session =& JFactory::getSession();
$joomla_user = $joomla_session->get('user');
于 2012-09-10T12:17:56.143 回答