在Heroku上使用CakePHP的SSL重定向进行“太多重定向”

nah*_*hri 2 ssl redirect cakephp 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

nah*_*hri 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';
        }));

    // ...

    }
}
Run Code Online (Sandbox Code Playgroud)

希望我能帮助所有在我之后遇到这个问题的人。我花了几个小时才弄清楚这一点。