Home > PHP | フレームワーク > CakePHPではまったこと 5(ログイン処理・レイアウト)

CakePHPではまったこと 5(ログイン処理・レイアウト)

メタルギアソリッドがXBOXに行っちゃったりするんでしょうか。
がんばれPS3!持ってないけど!

CakePHPでのログイン処理って、みんなapp_controller.phpのbeforeFilterでやろうとしてはまってるらしいです。
実は私もです。私の場合、なにが問題だったかというと、ログインしないとサインアップできないという・・・ね?


function beforeFilter()
{
    if($this->LogIn->isLoggedIn() == FALSE){
        $this->layout = "login";    // ログイン画面表示用のテンプレート(login.thtml)
    } else {
        $this->layout = "default"; // デフォルトのテンプレート(default.thtml)
    }
}

まあ、app_controller.phpで上のようにしていたわけです。ここでは「LogIn」っていうログイン処理をするコンポーネントを使っているとします。
何が問題かっていうと、例えばサインアップするためのメソッド「signup()」を「users_controller」が持っているとすると、サインアップするときは「/users/signup/」にアクセスすることになると思います。そうすると、まずapp_controllerのbeforeFilter()に入ってきて、当然まだログインしてないわけですから、「login.thtml」に飛ばされることになります。で、永遠にログイン画面を彷徨えます。
ログインしていれば、beforeFilter()を通り抜けて「default.thtml」に飛ばされるので、OKなわけです。変なことになってます。
(そもそも上のはレイアウトを変更しているだけなので、ログインしていなくてもコントローラの処理は走ります。まあ、かなりの大問題ですが、それはここでは置いといて。それに関しては後日考えます。たぶん。)
そういうわけで、以下のようにして無理やり切り抜けました。おそらくこんなことはしないほうがいい。


function beforeFilter()
{
    if ($this->name == "Users" || $this->name == "app") return;
    if($this->LogIn->isLoggedIn() == FALSE){
        $this->layout = "login";    // ログイン画面表示用のテンプレート(login.thtml)
    } else {
        $this->layout = "default"; // デフォルトのテンプレート(default.thtml)
    }
}

ちゃんと$this->nameにコントローラの名前が入ってきます。app_controllerの場合は「app」のようです。
これで、app_controllerのbeforeFilter()に入って欲しくないコントローラだけはじけます。
(あとで見たら相当おろかなことをやっていそうな。。)

追記:今はこんな感じ ログイン処理

以上

Comments:1

PKBSFVCIBJNIMIC 18-09-10 (月) 9:27

wonderful post, very informative. I wonder why the other specialists of this sector do not notice this. You should continue your writing. I am sure, you have a huge readers’ base already!

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=52
Listed below are links to weblogs that reference
CakePHPではまったこと 5(ログイン処理・レイアウト) from コスミー報告書[社外秘]

Home > PHP | フレームワーク > CakePHPではまったこと 5(ログイン処理・レイアウト)

Search
Feeds
Meta
 合計:019091
 今日:0084 昨日:0146

Return to page top