やかんブログ

[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名の形式が変わっちゃうのは何とかしたいですね。。。 回避できる設定とかあるのかな?

この記事に関するお問い合わせはこちら

ページの先頭へ