在heroku上使用CakePHP的SSL重定向“太多重定向”

时间:2013-04-05 18:56:03

标签: cakephp redirect ssl heroku

我的蛋糕应用程序尝试使用[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);
    }
}

1 个答案:

答案 0 :(得分:6)

问题是CakePHP和heroku以不同的方式处理它们的安全连接。

Cake检查环境变量'HTTPS'是真还是假。 heroku不提供此env,而是发送带有'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';
        }));

    // ...

    }
}

希望我可以帮助所有遇到此问题的人。它让我花了几个小时来解决这个问题。