CakePHPでBasic認証対応ページを作る

2008.07.30 / php

1.2だとBasic認証対応ページを作るのも超簡単です。

対応させたいControllerにSecurityコンポーネントを適用

まずSecurityコンポーネントを利用します。

      class HogeController extends AppController {
          var $name = 'Hoge';
          var $uses = array('Hoge');
          var $components = array('Security');
                  ...
         }
  

認証情報を追加

beforeFilterに認証に必要な情報を追加します。

          function beforeFilter(){
              parent :: beforeFilter();           
  
              $this->Security->loginOptions = array('type'=>'basic');
              $this->Security->loginUsers = array('katsuma'=>'katsukatsu');
              $this->Security->requireLogin('*');
  
          }
  

ここではUser:katsuma, Pass:katsukatsuの認証情報で、全アクションで認証を必要とさせています。認証を特定のアクションのみに限定させたいときは、requireLoginメソッドで、認証を実行するアクション名のリストを指定します。基本的には必要なことはこれだけです。簡単!

Formは要注意

一点、要注意な事項としてFormを必要とするView、たとえば何らかのPostを実行するようなFormのViewがあるときに、そのFormを構成する要素はすべてFormヘルパを利用する必要があるということです。

inputタグなんかの要素はもちろん、たとえばformタグを書き出すときも

  <form action="/Hoge/add"
  

とかじゃダメで、

  <?php e($form->create('Hoge', array('action'=>'add')))?>
  

じゃなければダメです。(こうしないと認証がかからない)

これはどうもヘルパを利用すると、Tokenのようなものを全要素に対して自動的に追加して、このTokenがちゃんと追加されていないとSecurityコンポーネントが働かないようです。「formタグくらいどうでもいいだろー」とタカをくくってて、痛い目にあったので皆さんもご注意ください。。