次のように、CakePHP 1.3 で REST API をセットアップしました。これは、Security コンポーネントと Auth コンポーネントを組み合わせて使用し、ユーザー ログインの HTTP 認証を容易にします。
ユーザーコントローラー:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('view', 'add');
if ( $this->params['url']['ext'] == 'json' && !$this->Auth->user() ) {
$this->Auth->allow('edit', 'add_friend');
$this->Security->loginOptions = array(
'type'=>'basic',
'login'=>'authenticate',
'realm'=>'MyRealm'
);
$this->Security->loginUsers = array();
$this->Security->requireLogin('edit', 'add_friend');
}
}
AppController:
function authenticate($args) {
$data[ $this->Auth->fields['username'] ] = $args['username'];
$data[ $this->Auth->fields['password'] ] = $this->Auth->password($args['password']);
if ( $this->Auth->login($data) ) {
return true;
} else {
$this->Security->blackHole($this, 'login');
return false;
}
}
これはすべて正常に機能していますが、私の問題は、オプションで認証を行うかどうかを指定できる方法があることです。CakePHP の Security コンポーネントには、requireLogin()
認証を強制するメソッドがあるようです。
authenticate()
常にtrueを返す新しいメソッドを作成しようとしました:
function optionalAuthenticate($args) {
$data[ $this->Auth->fields['username'] ] = $args['username'];
$data[ $this->Auth->fields['password'] ] = $this->Auth->password($args['password']);
$this->Auth->login($data);
return true;
}
しかし、残念ながらそれはうまくいきませんでした。
セキュリティ コンポーネントを使用して、ある種のオプションの承認を達成できる方法を知っている人はいますか?