[Symfony] sfSSLRequirementPluginでSSL通信にリダイレクトされない
2009年06月10日(水)09:00|谷口
谷口です。
[Symfony] HTTP通信を強制的にHTTPS通信に変えるプラグインで、sfSSLRequirementPluginの紹介をしました。symfony 1.0で実際に設定を進めていると、httpsにリダイレクトされないケースがありました。。。 ※https通信にしたいURLは「http://mydomain.com/myApp.php/myModule/myAction/」として説明します。
apps/myApp/modules/myModule/config/security.ymlは以下のように設定しています。
myAction:
require_ssl: true
なぜか、http://mydomain.com/myApp.php/myModule/myAction/のままアクセスできてしまいます。 symfony cc しても、ブラウザキャッシュを消してもダメ。 で、実際にコードを追ってみたところ、下記のsslRequiredメソッドがfalseを返しているようでした。。。
plugins/sfSslRequirementPlugin/lib/action/sfSslRequirementActionMixin.class.php
class sfSslRequirementActionMixin
{
static public function sslRequired($action)
{
$security = $action->getSecurityConfiguration();
$actionName = $action->getActionName();
if (isset($security[$actionName]['require_ssl']))
{
return $security[$actionName]['require_ssl'];
}
if (isset($security['all']['require_ssl']))
{
return $security['all']['require_ssl'];
}
return false;
}
ここで、$security変数を見てみました。すると。。。
Array
(
[myaction] => Array
(
[require_ssl] => 1
)
)
一方、$actionNameを見てみると、「myAction」となっていました。大文字が小文字に変換されているため、falseを返していました。本来なら$action->getSecurityConfiguration()側で対応するのが望ましいとは思いますが、$actionNameをすべて小文字に変換することで、https://mydomain.com/myApp.php/myModule/myAction/ にリダイレクトされるようになりました。
class sfSslRequirementActionMixin
{
static public function sslRequired($action)
{
$security = $action->getSecurityConfiguration();
$actionName = $action->getActionName();
↓
class sfSslRequirementActionMixin
{
static public function sslRequired($action)
{
$security = $action->getSecurityConfiguration();
$actionName = strtolower($action->getActionName());
symfonyのバージョンにもよるかもしれませんが、action名の形式が変わっちゃうのは何とかしたいですね。。。 回避できる設定とかあるのかな?