2

JoomlaとCakePHP(1.3)アプリの間でSSOをコーディングしようとしています。ユーザーはJoomlaにログインし、リンクをクリックしてCakePHPアプリに移動し、同じユーザーでログインできる必要があります。

私のusers_controllerには、「joomlalogin()」というアクションがあり、Joomlaセッション変数を読み取り、joomlaユーザーがCakePHPアプリにすでに存在するかどうかを確認し、存在しない場合はユーザーを作成します。これはすべて機能します。

問題は、Auth-> login()を使用してユーザーを手動でログインできないように見えることです。フルユーザーを渡してみました。user_idを渡してみました。関数は「true」を返しますが、次のページに移動するとすぐにログインに失敗したようです。コードの1つのバージョンは次のとおりです。

$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');
}

フラッシュメッセージが表示され、リダイレクトが発生しますが、匿名ユーザーには「/ users」が許可されていないため、すぐに(通常の非sso)ログインフォームにリダイレクトされます。

ユーザーが実際にログインしていない場合、Auth-> login()が「true」を返すのはなぜですか。Auth-> User()を見ると、正しいユーザーデータが含まれており、リダイレクトが発生するまでユーザーがログインしていることがすべて示されます。 。これの原因は何でしょうか、または私が間違っていることは何ですか?

4

3 に答える 3

1

私は同じ問題を抱えていました。サーバーVMで実行されているシステムクロックが正しくないことが判明しました。このコマンドを実行して更新しました。

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 に答える