1

私は現在、フォーム認証を備えたCakePHPアプリケーションを開発しています。また、このアプリケーションを開いて、他のアプリケーションがREST経由で接続できるようにしたいと思います。

私はCakePHPがこれを使用してこれを行うことができることを知っています

Router::mapResources() 

Router::parseExtensions() 

ただし、これを基本またはダイジェストHTTP認証などで機能させる方法がわかりません。

AppController.phpに次のものがあります

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form'
        ),
        'loginAction' => array(
            'admin' => false,
            'controller' => 'users',
            'action' => 'login'
        ),
        'loginRedirect' => array(
            'controller' => 'users',
            'action' => 'home'
        )
    )
);

たとえば、認証フィールドの場合、「基本」にあります。Webベースのバージョンにログインすると、WebベースのフォームではなくHTTP認証ボックスが表示されます。

これを行うための最良の方法は何ですか?現時点で私が考えることができる唯一の方法は、別のApiControllerを作成し、手動で認証を行うことです。

どんなアドバイスも素晴らしいでしょう。

アップデート:

これは私に正しい振る舞いを与えている私の改訂されたコードです-これを行うためのより良い方法があるはずだと私はかなり確信しています。

class AppController extends Controller {

    public $components = array(
        'Session',
        'RequestHandler',
        'Auth' => array(
            'loginAction' => array(
                'admin' => false,
                'controller' => 'users',
                'action' => 'login'
            ),
            'loginRedirect' => array(
                'controller' => 'users',
                'action' => 'home'
            )
        )
    );

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

    public function beforeFilter() {
        $header = $_SERVER['HTTP_AUTHORIZATION'];
        if($header) {
            $this->Auth->authenticate = array('Basic');
        }
    }

}
4

2 に答える 2

1
public function beforeFilter() {

    // Change the authentication if using REST
    if($this->params['ext'] == 'json') {
        $this->Auth->authenticate = array('Basic');
    }

}

これは、リクエストに含まれている場合は JSON 拡張機能をチェックし、基本認証に切り替えます。

于 2012-06-25T12:26:54.710 に答える
0

CakePHP ブックの認証の章を確認してください。

CakePHP は Form、Basic、Digest をサポートしており、独自の認証オブジェクトを作成して使用することができます。

複数の認証オブジェクトを読み込むことができ、Cake は最初のオブジェクトが認証ハンドラーに true を返したときにユーザーをログインさせます。フォーム認証オブジェクトしかロードされていないため、http 認証ボックスが表示される理由がわかりません。Cake が問題である可能性は低いです。

于 2012-06-21T09:18:25.487 に答える