2012-09-03 41 views
2

我試圖編寫Joomla和我的CakePHP(1.3)應用程序之間的SSO。用戶應該能夠登錄到Joomla,點擊鏈接進入CakePHP應用程序並使用同一用戶登錄。Cakephp - Auth-> login()返回true,但下一頁我不再登錄

在我的users_controller中,我有一個名爲'joomlalogin()'的動作,在那裏我讀取Joomla會話變量,檢查joomla用戶是否已經存在於我的CakePHP應用程序中,如果不是,請創建用戶。這一切都有效。

問題是,我似乎無法手動登錄用戶使用Auth-> login()。我嘗試傳遞一個完整的用戶,試圖傳遞user_id。該函數返回'真',但只要我去下一頁,登錄似乎失敗了。下面的代碼的一個版本:

$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)登錄表單。

爲什麼Auth-> login()在用戶沒有真正登錄時返回'true'。當我查看Auth-> User()時,它包含正確的用戶數據,一切都表明用戶已登錄直到重定向發生。任何想法可能是這個或我做錯了什麼原因?

+0

你有會話正確設置core.php? – bfavaretto

+0

我已經有一個正常的用戶系統/登錄過程(SSO代碼之前),它仍然正常工作。所以會議必須按我的設想妥善設置。 – Kiluminati

+0

你應該檢查用戶是否登錄。也許他是,但你授權去/用戶時犯了錯誤。 –

回答

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'); 
0

檢查是否爲所有要在用戶信息中攜帶的控制器啓用會話;通常將它放在AppController中很方便。

例如:

class AppController extends Controller { 

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

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

} 
+0

所有控制器都通過AppController具有會話組件。如上所述,會話完美適用於正常登錄。只有手動登錄纔會持續。 – Kiluminati

1

我有同樣的問題。原來在我的服務器虛擬機上運行的系統時鐘不正確。我運行這個命令來更新它。

ntpdate time.windows.com 

注意,這不能解決根本的問題,這是虛擬機有麻煩保持準確的時間,由於時鐘週期的性質,暫停並暫停。與您的服務器管理員聯繫以獲得更持久的解決方案歡呼@Olivier的提示

+0

對於更持久的解決方案,您可以嘗試設置ntp服務器(當vm啓動時會自動同步)。 'sudo apt-get install ntp'。 – Olivier

+0

我沒有運行虛擬機,它是一個Linux服務器。服務器上的時鐘工作正常,所以這並不能解決我的問題。 – Kiluminati

相關問題