Session Cakephp-Auth->;login()返回true,但返回下一页I';我不再登录了

Session Cakephp-Auth->;login()返回true,但返回下一页I';我不再登录了,session,cakephp,authentication,single-sign-on,Session,Cakephp,Authentication,Single Sign On,我试图在Joomla和我的CakePHP(1.3)应用程序之间编写一个SSO。用户应该能够登录到Joomla,单击链接转到CakePHP应用程序,并与同一用户一起登录 在我的users\u controller中,我有一个名为“joomlalogin()”的操作,我在其中读取Joomla会话变量,检查Joomla用户是否已经存在于我的CakePHP应用程序中,如果不存在,则创建用户。这一切都有效 问题是我似乎无法使用Auth->login()手动登录用户。我尝试传递完整用户,尝试传递用户id。函

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

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

问题是我似乎无法使用Auth->login()手动登录用户。我尝试传递完整用户,尝试传递用户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');
}
flash消息出现时,会发生重定向,但会立即重定向到(常规非sso)登录表单,因为匿名用户不允许使用“/users”


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

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

例如:

class AppController extends Controller {

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

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

}

我也有同样的问题。我的服务器VM上运行的系统时钟不正确。我运行这个命令来更新它

ntpdate time.windows.com

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

我找到了原因。这个问题与包含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');

您是否在core.php上正确设置了会话?我已经有了一个正常的usersystem/login过程(在SSO代码之前),它仍然正常工作。因此,我认为会话必须正确设置。您应该检查用户是否登录。也许他是,但你在授权go/用户时犯了一个错误。这也发生在我身上。在我的开发笔记本电脑(OSX上内置的Apache)上运行良好,但在我的Web服务器(Ubuntu)上则不行。这让我相信这不是文件系统的权限问题,就是缺少模块。我没有在日志中看到任何错误,所以我怀疑是后者。需要安装什么才能使AuthComponent正常工作?@ALS:用户已登录,我进行该检查。转到“/users”并不是一个错误,实际上并没有,我只是举了一个例子,更改重定向到其他页面没有什么不同的效果。所有控制器都通过AppController拥有会话组件。如前所述,会话对于正常登录非常有效。只有手动登录不会持久。要获得更持久的解决方案,您可以尝试设置ntp服务器(在vm启动时自动同步)
sudo apt get install ntp
。我没有运行虚拟机,它是linux服务器。服务器上的时钟工作正常,所以这并不能解决我的问题。