2

[310] Too many redirectsのケーキアプリが強制的に安全な接続にリダイレクトしようとすると、herokuでエラーが発生しSecurityComponent::requireSecure()ます.

public function beforeFilter() {
    $this->Security->blackHoleCallback = '_blackholeCallback';
    $this->Security->requireSecure('login', 'register');
}

// ...

public function _blackholeCallback($type) {
    if ($type == 'secure') {
        $this->redirect('https://' . env('SERVER_NAME') . $this->here);
    }
}
4

1 に答える 1

6

問題は、CakePHP と heroku が安全な接続を異なる方法で処理することでした。

Cake は、環境変数 'HTTPS' が真か偽かをチェックしています。heroku はこの環境を提供しません。代わりに、ヘッダー「X-Forwarded-Proto」に「https」値を付けて送信しています。

新しい (または古い「ssl」を上書きする) 検出器を追加し、このヘッダーを確認する必要があります。私はこのようにしました:

class AppController extends Controller {

    public function beforeFilter() {
        $this->request->addDetector('ssl', array('callback' => function() {
            return CakeRequest::header('X-Forwarded-Proto') == 'https';
        }));

    // ...

    }
}

私の後にこの問題を抱えているすべての人を助けることができれば幸いです. これを理解するのに数時間かかりました。

于 2013-04-05T18:56:02.570 に答える