ユーザーがブラウザーで表示できる Web アプリケーションを構築しようとしていますが、開発者がアプリケーションとやり取りするための API も備えています。私の質問は、CakePHP でのリクエストの種類に基づいて認証を変更するにはどうすればよいですか?
アプリケーションでフォーム認証を使用してサイトを使用するユーザーにプロンプトを表示したいのですが、要求が「.json」で受信された場合は基本認証を使用します。
私は自分のAppControllerでこれを試しました:
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'journeys',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display', 'home'
)
),
'RequestHandler'
);
public function beforeFilter() {
if($this->params['ext'] == 'json') {
$this->Auth->authenticate = array('Basic');
} else {
$this->Auth->authenticate = array('Form');
}
$this->Auth->allow('display');
}
}
beforeFilter の句が機能するかどうかを確認しましたが、アプリケーションでどの URL を試してアクセスしても、フォーム認証にリダイレクトされるようです
私の UsersController ファイルのログイン関数は次のようになります。
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
CakePHP Web サイトのドキュメントを読みましたが、役立つ例が見つからないようです。どんな助けでも大歓迎です。
コードと詳細情報を修正するために編集
私はこの問題を調べ続けましたが、次の値をログに記録すると次のことに気付きました。
$this->Auth->authenticate
beforeFilter では、それは基本的であると言われていますが、それでもログインフォームに送られています。