7

Securityログインしようとすると、コンポーネントによってリクエストがブラックホール化されます。どうすれば正しく動作させることができますか?

シンプルなログインフォームがあります

  <div class="container container-login">
    <h2><?php echo __('Login'); ?></h2>
    <div class="wrap-form-signin">
    <?php
    echo $this->Form->create('User', array('action' => 'login', 'class' => 'form-signin'));
    echo $this->Form->input('username', array('label' => '', 'placeholder' => __('Email')));
    echo $this->Form->input('password', array('label' => '', 'placeholder' => __('Password')));
    echo $this->Form->submit(__('Login'));
    echo $this->Form->end();
    ?>
    </div>
</div>

コントローラーのアクションは次のようになります。

public function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                return $this->redirect($this->Auth->redirectUrl());             
            } else {
                $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
            }
        }
}

そして、Securityコンポーネントはに含まれていますAppController

public $components = array('Security', ... );

error.log には次のように表示されます。

2013-03-29 13:40:58 Error: [BadRequestException] The request has been black-holed
Request URL: /users/login
Stack Trace:
#0 C:\wamp\www\cdx\lib\Cake\Controller\Component\SecurityComponent.php(234): SecurityComponent->blackHole(Object(UsersController), 'auth')
#1 [internal function]: SecurityComponent->startup(Object(UsersController))
#2 C:\wamp\www\cdx\lib\Cake\Utility\ObjectCollection.php(131): call_user_func_array(Array, Array)
#3 [internal function]: ObjectCollection->trigger(Object(CakeEvent))
#4 C:\wamp\www\cdx\lib\Cake\Event\CakeEventManager.php(247): call_user_func(Array, Object(CakeEvent))
#5 C:\wamp\www\cdx\lib\Cake\Controller\Controller.php(670): CakeEventManager->dispatch(Object(CakeEvent))
#6 C:\wamp\www\cdx\lib\Cake\Routing\Dispatcher.php(183): Controller->startupProcess()
#7 C:\wamp\www\cdx\lib\Cake\Routing\Dispatcher.php(161): Dispatcher->_invoke(Object(UsersController), Object(CakeRequest), Object(CakeResponse))
#8 C:\wamp\www\cdx\app\webroot\index.php(92): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#9 {main}

リクエストがブラック ホールに送られている原因を特定するにはどうすればよいですか?

カスタム ブラックホール ハンドラーを使用しようとしたとき、エラーの種類はauth. しかし、それは私が得ることができるすべての情報です

CakePHP の私のバージョンは 2.3.1 です

Security編集:ログインはコンポーネントなしでうまく機能します。に追加するとAppController、ログインが機能しなくなります。

data[_Token][key]EDIT2:フォームにフィールドがありません

EDIT3 THE SOLLUTION: 私のチームの誰かが HTMLHelper クラスをオーバーライドし、_tags 配列の「hiddenblock」を見逃したため、_Token フィールドが欠落しました。詳細については、私の回答と thaJeztah の回答とその下のコメントを参照してください。

4

5 に答える 5

0

あなたが提供した情報でテストするのは難しいですが、フォームの create 呼び出しを次のように変更してみます: echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'login'), 'class' => 'form-signin'));

authエラーのタイプは、フォーム検証エラー、またはコントローラー/アクションの不一致エラーを示します。フォームを表示するページが NOT/users/loginの場合、セキュリティ コンポーネントを使用するとクロス コントローラー通信がブラックホール化されるため、これが発生する可能性があります。それが役に立てば幸い

username編集:検証エラーは、認証コンポーネント、チェックアウトクックブックを定義していないという事実を示している可能性もあります

于 2013-03-31T12:57:54.323 に答える