0

CakePHPアプリ(jSlate)を特注の非CakeWebアプリケーションに統合する際に問題が発生しました。私が見たすべての代替認証スクリプトは、ログインフォームの動作を変更するだけです。つまり、ログインフォームは引き続き表示され、ユーザー名とパスワードを要求しますが、これらはLDAPなどの代替ソースに対して認証されます。

私が実際に望んでいるのは、ログイン画面がまったく表示されないことです。代わりに、非常に単純な動作が必要です。

  1. ユーザーがすでにサードパーティのアプリにログインしているかどうかを検出します。
  2. はいの場合、CakePHPアプリ(この場合はjSlate)に自動的にログインします。
  3. いいえの場合は、サードパーティのアプリのログイン画面にリダイレクトします。

これらの線に沿ったCakePHP認証のチュートリアルはありますか?または誰かがこれを行う方法を知っていますか?パート3の実行方法を理解しましたが、この動作はパート1とパート2がないと役に立たないものです...

4

1 に答える 1

1

これをあなたのに入れることができますAppController::beforeFilter

public function beforeFilter() {
    if (!$this->Auth->user()) {
        // if no user is currently logged in

        if ($this->Cookie->read(...)) {
        // or
        if ($_COOKIE[...]) {
        // or whatever else you want to detect

            $this->redirect('http://some.external/login/service');
        }
    }
}

この外部ログイン サービスは、おそらく何らかのトークンを使用して、ある時点でユーザーを Cake アプリにリダイレクトします。リダイレクト先となる公的にアクセス可能なアクション (認証は必要ありません) を定義するだけです。そのアクションでは、必要なすべてのトークンを確認してから、ユーザーを「手動で」認証できます。

$user = $this->User->find(/* find your Cake user by some id */);
if ($user) {
    $this->Auth->login($user['User']['id']);
}

おめでとうございます。ユーザーは、ログインフォームを使用したかのようにログインし、有効な Cake セッションを持っています。

于 2012-07-06T09:51:12.673 に答える