2013-04-05 76 views
2

我在Heroku上,讓[310] Too many redirects錯誤,當我的蛋糕的應用程序試圖與SecurityComponent::requireSecure()迫使它後重定向到一個安全的連接。「過多的重定向」使用CakePHP的SSL重定向在Heroku

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

問題是CakePHP和heroku以不同方式處理他們的安全連接。

蛋糕對環境變量「HTTPS」檢查是真還是假。 的Heroku不提供此ENV,相反,他們要發送的報頭「X - 轉發,原」以「https」時的值。

您必須添加一個新的(或覆蓋舊「SSL」)檢測,並檢查該頭。 我做了這樣的:

class AppController extends Controller { 

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

    // ... 

    } 
} 

希望我能幫助誰在爲我以後這個問題大家。它讓我花了幾個小時才弄明白這一點。

+0

- 尼斯找到!也許你應該考慮爲此創建一個「補丁」,並在GitHub上創建一個「pull」請求。不知道這是否會干擾'正常'的SSL託管情況,但據我所知,這應該不會導致問題? – thaJeztah 2013-04-05 21:59:07

+0

是的,我也在考慮這樣做。 AFAIK「X-Forwarded-Proto」標題是事實上的標準。不應該導致問題。只需要搜索一些資源,所以這些人相信我。 – nahri 2013-04-06 11:04:58

+0

在此先感謝,雖然我沒有使用Heroku的自己,提高CakePHP是一件好事:) – thaJeztah 2013-04-06 11:47:11