2

ユーザーがブラウザーで表示できる 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 では、それは基本的であると言われていますが、それでもログインフォームに送られています。

4

1 に答える 1

0

ドキュメントからの抜粋 ( http://book.cakephp.org/2.0/en/core-libraries/components/authentication.htmlを参照):

基本認証とダイジェスト認証は最初の POST またはフォームを必要としないため、基本認証/ダイジェスト認証のみを使用する場合は、コントローラーでログイン アクションを必要としません。また、AuthComponent::$sessionKey を false に設定して、AuthComponent がセッションからユーザー情報を読み取らないようにすることもできます。

したがって、ログイン アクションは必要ありません。ユーザーコントローラーで認証方法を確認し、認証方法が「基本」の場合はログインアクションをスキップできます。

于 2013-10-23T11:30:00.843 に答える