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 不提供此环境,而是发送带有“https”值的标头“X-Forwarded-Proto”。

您必须添加一个新的(或覆盖旧的“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 回答